Россия, г. Санкт-Петербург |
Лекция 21: Создание хранимых процедур и управление этими процедурами
Использование SELECT для возвращаемых значений
Вы можете также возвращать данные из хранимой процедуры с помощью оператора SELECT, находящегося внутри этой процедуры. Вы можете возвращать результирующий набор из запроса SELECT или возвращать значение переменной.
Рассмотрим пару примеров. Сначала мы создадим новую хранимую процедуру с именем PrintUnitPrice, которая возвращает цену единицы продукции для продукта, указанного во входном параметре (с помощью идентификатора этого продукта). Используется следующая последовательность:
CREATE PROCEDURE PrintUnitPrice @prod_id int AS SELECT ProductID, UnitPrice FROM Products WHERE ProductID = @prod_id GO
Вызовите эту процедуру со значением входного параметра 66, как это показано ниже:
PrintUnitPrice 66 GO
Результаты будут выведены в следующей форме:
ProductID UnitPrice ------------------------------------------ 66 17.00 (1 row(s) affected)
Для возврата значений переменных с помощью оператора SELECT, укажите после SELECT имя соответствующей переменной. В следующем примере мы снова создадим хранимую процедуру CheckUnitPrice, которая возвращает значение переменной, а также зададим заголовок выводимой колонки:
USE Northwind GO IF EXISTS (SELECT name FROM sysobjects WHERE name = "CheckUnitPrice" AND type = "P") DROP PROCEDURE CheckUnitPrice GO CREATE PROCEDURE CheckUnitPrice @prod_id INT AS DECLARE @var1 int IF (SELECT UnitPrice FROM Products WHERE ProductID = @prod_id) > 100 SET @var1 = 1 ELSE SET @var1 = 99 SELECT "Variable 1" = @var1 PRINT "Can add more T-SQL statements here" GO
Вызовите эту процедуру со значением входного параметра 66, как это показано ниже:
CheckUnitPrice 66 GO
Результаты выполнения этой хранимой процедуры будут выведены в следующей форме:
Variable 1 -------------- 99 (1 row(s) affected) Can add more T-SQL statements here
Мы вывели текст оператора PRINT "Can add more T-SQL statements here" (Здесь можно добавить другие операторы T-SQL), чтобы показать отличие между возвратом значения с помощью SELECT и возвратом значения с помощью RETURN. Оператор RETURN прекращает работу хранимой процедуры в том месте, где он находится, а оператор SELECT возвращает свой результирующий набор, после чего продолжается выполнение хранимой процедуры.
Если бы в этом примере мы не задали заголовок колонки (просто указали бы SELECT @var1 ), то получили бы результат без заголовка, как это показано ниже:
-------------- 99 (1 row(s) affected)