Через переменные мы можем передавать данные в запросы. И также мы можем получать данные, которые являются результатом запросов, в переменные. Например, при выборке из таблиц с помощью команды SELECT мы можем извлекать данные в переменную с помощью следующего синтаксиса:
1
2
3
4
| SELECT @переменная_1 = спецификация_столбца_1, @переменная_2 = спецификация_столбца_2, ...................................... @переменная_N = спецификация_столбца_N |
Кроме того, в выражении SET значение, присваиваемое переменной, также может быть результатом команды SELECT.
Например, пусть у нас будут следующие таблицы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY , ProductName NVARCHAR(30) NOT NULL , Manufacturer NVARCHAR(20) NOT NULL , ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); CREATE TABLE Customers ( Id INT IDENTITY PRIMARY KEY , FirstName NVARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT IDENTITY PRIMARY KEY , ProductId INT NOT NULL REFERENCES Products(Id) ON DELETE CASCADE , CustomerId INT NOT NULL REFERENCES Customers(Id) ON DELETE CASCADE , CreatedAt DATE NOT NULL , ProductCount INT DEFAULT 1, Price MONEY NOT NULL ); |
Используем переменные при извлечении данных:
1
2
3
4
5
6
7
8
9
10
11
12
13
| DECLARE @maxPrice MONEY, @minPrice MONEY, @dif MONEY, @ count INT SET @ count = ( SELECT SUM (ProductCount) FROM Orders); SELECT @minPrice= MIN (Price), @maxPrice = MAX (Price) FROM Products SET @dif = @maxPrice - @minPrice; PRINT 'Всего продано: ' + STR(@ count , 5) + ' товарa(ов)' ; PRINT 'Разница между максимальной и минимальной ценой: ' + STR(@dif) |
В данном случае переменная @count будет содержать сумму всех значений из столбца ProductCount таблицы Orders, то есть общее количество проданных товаров.
Переменные @min и @max хранят соответственно минимальное и максимальное значения столбца Price из таблицы Products, а переменная @dif - разницу между этими значениями. И подобно простым значениям, переменные также могут участвовать в операциях.
Другой пример:
1
2
3
4
5
6
7
8
9
10
11
| DECLARE @ sum MONEY, @id INT , @prodid INT , @ name NVARCHAR(20); SET @id=2; SELECT @ sum = SUM (Orders.Price*Orders.ProductCount), @ name =Products.ProductName, @prodid = Products.Id FROM Orders INNER JOIN Products ON ProductId = Products.Id GROUP BY Products.ProductName, Products.Id HAVING Products.Id=@id PRINT 'Товар ' + @ name + ' продан на сумму ' + STR(@ sum ) |
Здесь извлекаемые данные из двух таблиц Products и Orders группируются по столбцам Id и ProductName из таблицы Products. Затем данные фильтруются по столбцу Id из Products. А извлеченные данные попадают в переменные @sum, @name, @prodid.
Комментариев нет:
Отправить комментарий