Страницы

Поиск по вопросам

понедельник, 24 сентября 2018 г.

Переменные в запросах SQL

Через переменные мы можем передавать данные в запросы. И также мы можем получать данные, которые являются результатом запросов, в переменные. Например, при выборке из таблиц с помощью команды 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 - разницу между этими значениями. И подобно простым значениям, переменные также могут участвовать в операциях.
Переменные в запросах в T-SQL
Другой пример:
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.
Переменные в запросах SELECT в MS SQL Server

Комментариев нет:

Отправить комментарий