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

Последнее обновление: 14.08.2017

Выходные параметры позволяют возвратить из процедуры некоторый результат. Выходные параметры определяются с помощью ключевого слова OUTPUT. Например, определим еще одну процедуру:

USE productsdb;
GO
CREATE PROCEDURE GetPriceStats
	@minPrice MONEY OUTPUT,
	@maxPrice MONEY OUTPUT
AS
SELECT @minPrice = MIN(Price),  @maxPrice = MAX(Price)
FROM Products

При вызове процедуры для выходных параметров передаются переменные с ключевым словом OUTPUT:

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:

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 можно получить идентификатор добавленной записи.

При вызове этой процедуры ей также по позиции передаются все входные и выходные параметры:

USE productsdb;

DECLARE @id INT

EXEC CreateProduct 'LG V30', 'LG', 3, 28000, @id OUTPUT

PRINT @id

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

Кроме передачи результата выполнения через выходные параметры хранимая процедура также может возвращать какое-либо значение типа INT с помощью оператора RETURN. Хотя данная возможность во многом нивелирована использованием выходных параметров, через которые можно возвращать результат, тем не менее, если надо возвратить из процедуры одно значение, то вполне можно использовать оператор RETURN.

Например, возвратим среднюю цену на товары:

USE productsdb;
GO
CREATE PROCEDURE GetAvgPrice AS
DECLARE @avgPrice MONEY
SELECT @avgPrice = AVG(Price)
FROM Products
RETURN @avgPrice;

После оператора RETURN указывается возвращаемое значение. В данном случае это значение переменной @avgPrice.

Вызовем данную процедуру:

USE productsdb;

DECLARE @result MONEY

EXEC @result = GetAvgPrice
PRINT @result

Для получения результата процедуры ее значение сохраняется в переменную (в данном случае в переменную @result):

Оператор RETURN в хранимых процедурах в MS SQL Server

Стоит отметить, что RETURN возвращает только целочисленные значения.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850