Страницы

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

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

Выходные параметры и возвращение результата в SQL

Выходные параметры позволяют возвратить из процедуры некоторый результат. Выходные параметры определяются с помощью ключевого слова OUTPUT. Например, определим еще одну процедуру:
1
2
3
4
5
6
7
8
USE productsdb;
GO
CREATE PROCEDURE GetPriceStats
    @minPrice MONEY OUTPUT,
    @maxPrice MONEY OUTPUT
AS
SELECT @minPrice = MIN(Price),  @maxPrice = MAX(Price)
FROM Products
При вызове процедуры для выходных параметров передаются переменные с ключевым словом OUTPUT:
1
2
3
4
5
6
7
USE productsdb;
DECLARE @minPrice MONEY, @maxPrice MONEY
EXEC GetPriceStats @minPrice OUTPUT, @maxPrice OUTPUT
PRINT 'Минимальная цена ' + CONVERT(VARCHAR, @minPrice)
PRINT 'Максимальная цена ' + CONVERT(VARCHAR, @maxPrice)
Выходные параметры в процедурах в MS SQL Server
Также можно сочетать входные и выходные параметры. Например, определим процедуру, которая добавляет новую строку в таблицу и возвращает ее id:
1
2
3
4
5
6
7
8
9
10
11
12
13
USE productsdb;
GO
CREATE PROCEDURE CreateProduct
    @name NVARCHAR(20),
    @manufacturer NVARCHAR(20),
    @count INT,
    @price MONEY,
    @id INT OUTPUT
AS
    INSERT INTO Products(ProductName, Manufacturer, ProductCount, Price)
    VALUES(@name, @manufacturer, @count, @price)
    SET @id = @@IDENTITY
С помощью глобальной переменной @@IDENTITY можно получить идентификатор добавленной записи.
При вызове этой процедуры ей также по позиции передаются все входные и выходные параметры:
1
2
3
4
5
6
7
USE productsdb;
DECLARE @id INT
EXEC CreateProduct 'LG V30', 'LG', 3, 28000, @id OUTPUT
PRINT @id

Возвращение значения

Кроме передачи результата выполнения через выходные параметры хранимая процедура также может возвращать какое-либо значение с помощью оператора RETURN. Хотя данная возможность во многом нивелирована использованием выходных параметров, через которые можно возвращать результат, тем не менее, если надо возвратить из процедуры одно значение, то вполне можно использовать оператор RETURN.
Например, возвратим среднюю цену на товары:
1
2
3
4
5
6
7
USE productsdb;
GO
CREATE PROCEDURE GetAvgPrice AS
DECLARE @avgPrice MONEY
SELECT @avgPrice = AVG(Price)
FROM Products
RETURN @avgPrice;
После оператора RETURN указывается возвращаемое значение. В данном случае это значение переменной @avgPrice.
Вызовем данную процедуру:
1
2
3
4
5
6
USE productsdb;
DECLARE @result MONEY
EXEC @result = GetAvgPrice
PRINT @result
Для получения результата процедуры ее значение сохраняется в переменную (в данном случае в переменную @result):
Оператор RETURN в хранимых процедурах в MS SQL Server

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

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