В этом уроке вы узнаете, как использовать выходные параметры для возврата данных обратно в вызывающую программу.
Создание выходных параметров
Чтобы создать выходной параметр для хранимой процедуры, используйте следующий синтаксис:
parameter_name data_type OUTPUT
Хранимая процедура может иметь много выходных параметров. Кроме того, выходные параметры могут быть в любом допустимом типе данных, например, целое число, дата и переменный символ.
Например, следующая хранимая процедура находит продукты по модельному году и возвращает количество продуктов через выходной параметр @product_count:
CREATE PROCEDURE uspFindProductByModel( @model_year SMALLINT, @product_count INT OUTPUT ) AS BEGIN SELECT product_name, list_price FROM production.products WHERE model_year = @model_year; SELECT @product_count = @@ROWCOUNT; END;
В этой хранимой процедуре:
Сначала мы создали выходной параметр с именем @product_count для хранения количества найденных продуктов:
@product_count INT OUTPUT
Во-вторых, после оператора SELECT мы присвоили параметру @product_count количество строк, возвращаемых запросом(@@ROWCOUNT).
Обратите внимание, что @@ROWCOUNT — это системная переменная, которая возвращает количество строк, считанных предыдущим оператором.
После выполнения приведенного выше оператора CREATE PROCEDURE хранимая процедура uspFindProductByModel компилируется и сохраняется в каталоге базы данных.
Если все в порядке, SQL Server выдает следующий вывод:
Commands completed successfully.
Вызов хранимых процедур с выходными параметрами
Чтобы вызвать хранимую процедуру с выходными параметрами, выполните следующие действия:
- Сначала объявите переменные для хранения значений, возвращаемых выходными параметрами.
- Во-вторых, используйте эти переменные при вызове хранимой процедуры.
Например, следующий оператор выполняет хранимую процедуру uspFindProductByModel:
DECLARE @count INT; EXEC uspFindProductByModel @model_year = 2018, @product_count = @count OUTPUT; SELECT @count AS 'Number of products found';
На следующем рисунке показан результат:
В этом примере:
Сначала объявим переменную @count для хранения значения выходного параметра хранимой процедуры:
DECLARE @count INT;
Затем выполните хранимую процедуру uspFindProductByModel и передайте параметры:
EXEC uspFindProductByModel @model_year = 2018, @product_count = @count OUTPUT;
В этом операторе model_year — 2018, а переменная @count присваивает значение выходного параметра @product_count.
Вы можете вызвать хранимую процедуру uspFindProductByModel следующим образом:
EXEC uspFindProductByModel 2018, @count OUTPUT;
Обратите внимание: если вы забудете указать ключевое слово OUTPUT после переменной @count, переменная @count будет иметь значение NULL.
Наконец, покажите значение переменной @count:
SELECT @count AS 'Number of products found';
В этом уроке вы узнали, как использовать выходной параметр для передачи данных из хранимой процедуры обратно в вызывающую программу.