Лекция 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)