Технология Microsoft ADO.NET


Создание хранимых процедур в SQL Query Analyzer - часть 4


/p>

Процедуры с выходными параметрами позволяют возвращать значения, получаемые в результате обработки SQL-конструкции при подаче определенного параметра. Представим, что нам нужно получать фамилию туриста по его коду (полю "Кодтуриста"). Создадим следующую процедуру:

create proc proc_po1 @TouristID int, @LastName nvarchar(60) output as select @LastName = Фамилия from Туристы where Кодтуриста = @TouristID

Оператор output указывает на то, что выходным параметром здесь будет @LastName. Запустим эту процедуру, извлекая фамилию туриста, значение поля "Кодтуриста" которого равно "4":

declare @LastName nvarchar(60) exec proc_po1 '4', @LastName output select @LastName

Оператор declare нужен для объявления поля, в которое будет выводиться значение. Получаем фамилию туриста (рис. 5.8)

Результат запуска процедуры proc_po1

Рис. 5.8.  Результат запуска процедуры proc_po1

Для задания названия столбца можно применить псевдоним:

declare @LastName nvarchar(60) exec proc_po1 '4', @LastName output select @LastName as 'Фамилия туриста'

Теперь столбец имеет заголовок (рис. 5.9):

Результат запуска процедуры proc_po1. Применение псевдонима

Рис. 5.9.  Результат запуска процедуры proc_po1. Применение псевдонима

В таблице 5.3 приводятся примеры хранимых процедур с входными и выходными параметрами.

Таблица 5.3. Хранимые процедуры с входными и выходными параметрами

№SQL-конструкция для созданияКоманда для извлечения№SQL-конструкция для созданияКоманда для извлечения№SQL-конструкция для созданияКоманда для извлечения№SQL-конструкция для созданияКоманда для извлечения№SQL-конструкция для созданияКоманда для извлечения
1

create proc proc_po1 @TouristID int, @LastName nvarchar(60) output as select @LastName = Фамилия from Туристы where Кодтуриста = @TouristID

declare @LastName nvarchar(60) exec proc_po1 '4', @LastName output select @LastName as 'Фамилия туриста'

Описание
Извлечение фамилии туриста по заданному коду
Результат запуска
2

create proc proc_po2 @CountCity int output as select @CountCity = count(Кодтуриста) from Информацияотуристах where Город like '%рг%'

declare @CountCity int exec proc_po2 @CountCity output select @CountCity as 'Количество туристов, проживающех в городах %рг%'

Описание
Подсчет количества туристов из городов, имеющих в своем названии сочетание букв "рг". Следует ожидать число три (Екатеринбург, Оренбург, Санкт-Петербург)
Результат запуска
3

create proc proc_po3 @TouristID int, @CountTour int output as select @CountTour = count(Туры.Кодтура) from Путевки inner join Сезоны on Путевки.Кодсезона = Сезоны.Кодсезона inner join Туры on Туры.Кодтура = Сезоны.Кодтура inner join Туристы on Путевки.Кодтуриста = Туристы.Кодтуриста where Туристы.Кодтуриста = @TouristID

exec proc_po3 '1', @CountTour output select @CountTour AS 'Количество туров, которые турист посетил'

Описание
Подсчет количества туров, которых посетил турист с заданным значением поля "Кодтуриста"
Результат запуска
4

create proc proc_po4 @TouristID int, @BeginDate smalldatetime, @EndDate smalldatetime, @SumMoney money output as select @SumMoney = sum(Сумма) from Оплата inner join Путевки on Оплата.Кодпутевки = Путевки.Кодпутевки inner join Туристы on Путевки.Кодтуриста = Туристы.Кодтуриста where Датаоплаты between(@BeginDate) and (@EndDate) and Туристы.Кодтуриста = @TouristID

declare @TouristID int, @BeginDate smalldatetime, @EndDate smalldatetime, @SumMoney money exec proc_po4 '1', '1/20/2007', '1/20/2008', @SumMoney output

select @SumMoney as 'Общая сумма за период'

Описание
Подсчет общей суммы, которую заплатил данный турист за определенный период. Турист со значением "1" поля "Кодтуриста" внес оплату 4/13/2007
Результат запуска
5

create proc proc_po5 @CodeTour int, @ChisloPutevok int output as

select @ChisloPutevok = count(Путевки.Кодсезона) from Путевки inner join Сезоны on Путевки.Кодсезона = Сезоны.Кодсезона inner join Туры on Туры.Кодтура = Сезоны.Кодтура where Сезоны.Кодтура = @CodeTour

declare @ChisloPutevok int exec proc_po5 '1', @ChisloPutevok output

select @ChisloPutevok AS 'Число путевок, проданных в этом туре'

Описание
Подсчет количества путевок, проданных по заданному туру
Результат запуска

Для удаления хранимой процедуры используется оператор drop:

drop proc proc1

Здесь proc1 - название процедуры (см. табл. 5.1).




Начало  Назад  Вперед



Книжный магазин