Выходные параметры применяются, когда нужно вернуть единственное значение в приложение. Если нужно вернуть целый результирующий набор, в хранимую процедуру включается инструкция SELECT, которая формирует результаты и возвращает результирующий набор в приложение, как показано далее.
Пример 2.4. |
Эта инструкция вернет в приложение результирующий набор
USE Sale
GO
CREATE PROCEDURE Proc3
AS
SELECT key_client, fam, city, name_firm FROM Client
В хранимых процедурах может применяться несколько конструкций, управляющих ходом выполнения процедуры:
♦ RETURN; ♦ IF...ELSE; ♦ BEGIN... END;
♦ WAITFOR; ♦ GOTO.
Назад в приложение можно передать код возврата, указывающий на состояние выполнения процедуры. Коды возврата не предназначены для пересылки данных, они применяются для сообщений о состоянии выполнения.
Инструкция RETURN завершает выполнение процедуры и возвращает управление вызывающему приложению.
Пример 2.5. |
После выполнения инструкции RETURN никакие инструкции не выполняются
CREATE PROCEDURE Proc4
AS
--Эта инструкция вернет 1
RETURN 1
--Любой код, начиная с этого места, выполняться не будет
IF...ELSE позволяет выполнять программный код в соответствии с условием. Инструкция IF проверяет заданное условие и выполняет следующую инструкцию, если условие равно True. Необязательная инструкция ELSE позволяет выполнить заданный программный код, если проверка условия вернула значение False.
Пример 2.6. |
Пример демонстрирует влияние значения null на результат сравнения. Вне зависимости от того, будет истинным условие @а>@b или @а<@b, всегда будет выполняться ветка ELSE SELECT @b.
Инструкция BEGIN...END позволяет обозначить блоки программного кода, которые следует выполнить.
Пример 2.7. |
Проверяется условие существования в таблице firm строки со столбцом name_firm, равным значению переменной (или параметра) @f. Если такая строка отсутствует, то выполняется команда INSERT, в противном случае выдается сообщение "Фирма в базе уже зарегистрирована".
USE Sale
GO
DECLARE@f NVARCHAR(50)
SET @f = 'Franchi S.p.A.'
IF exists(SELECT* from dbo.firm where name_firm=@f) BEGIN
SELECT'Фирма в базе уже зарегистрирована'
END
ELSE
BEGIN
INSERT INTO dbo. firm (name_firm) VALUES (@f)
SELECT'Название фирмы добавлено в базу' END
Конструкция CASE имеет два возможных формата использования.
Пример 2.8. |
Отобразить упорядоченный список товаров с расшифровкой категорий
USE Sale
GO
SELECTname_product
, CASE category
WHEN '1' THEN 'мебель'
WHEN '2' THEN 'техника'
ELSE 'офисная канцелярия'
END
,price
FROMproduct
ORDER BY name_product
Пример 2.9. |
Пример запроса с использованием конструкции CASE в другом формате.
, @b int=12
, @c int=16
SELECT CASE
WHEN @a>=@b and @a>=@c THEN str(@a)+ ' максимум'
WHEN @b>=@a and @b>=@c THEN str(@b)+ ' максимум'
WHEN @c>=@b and @c>=@a THEN str(@c)+ ' максимум'
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.