AS
SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY UnitPrice desc
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Параметры – расширенная возможность процедур. Вы можете с помощью параметров передавать в процедуру значения и получать обратно. Они позволяют вам использовать процедуру для поиска в базе данных множество раз. Например, вам может понадобится поиск счетов на определённую дату, и при этом дату можно передавать в процедуру в качестве параметра.
Входные параметры передавать информацию в процедуру. Для объявления процедуры, которая получает входные параметры, вы объявляете одну или более переменных как параметры в операторе CREATE PROCEDURE.
Примите к сведению следующие факты и рекомендации при указании параметров:
Все входные параметры должны быть вначале процедуры, чтобы заранее ловить неправильные или отсутствующие параметры.
Вы должны предоставлять значения по умолчанию для параметров. Если значение по умолчанию указано, то пользователь может вызывать процедуру, не указывая параметров. Параметр должен быть константой или нулевым значением. Если вы указываете нулевое значение, то нужно использовать Null. Конструкция IS NULL не поддерживается, потому что синтаксис ANSI NULL не поддерживается.
Максимальное количество параметров – 1024.
Максимальное количество локальных переменных ограничено только доступной памятью.
Параметры локальны для процедуры. Одинаковые имена параметров могут использоваться в разных процедурах.
Информация о параметрах хранится в системной таблице syscolumns.
Пример
Следующий пример создаёт процедуру, которая возвращает все продажи в указанный период:
CREATE PROCEDURE dbo.[Year to Year Sales]
@BeginningDate DateTime, @EndingDate DateTime
AS
IF @BeginningDate IS NULL OR @EndingDate IS NULL
BEGIN
RAISERROR('NULL value not allowed', 14, 1)
RETURN
END
SELECT o.ShippedDate, o.OrderID, OS.Subtotal,
DATENAME(yy, ShippedDate) AS Year
FROM Orders o INNER JOIN [Order Subtotal] os
ON o.OrderID=os.OrderID
WHERE o.ShippedDate BETWEEN @BeginningDate AND @EndingDate
GO
Для вызова процедуры вы должны после имени процедуры перечислить все передаваемые параметры. Например, процедура, созданная в предыдущем примере может быть вызвана следующим образом:
EXEC dbo.[Year to Year Sales]
@BeginningDate='10/10/2000',
@EndingDate='10/11/2002'
Можно вызывать процедуру без указания имени переменной, но при этом нужно перечислять параметры по мере их перечисления в объявлении процедуры:
EXEC dbo.[Year to Year Sales]
'10/10/2000', '10/11/2002'
Процедуры могут возвращать информацию вызывающей процедуре или клиенту через выходные параметры (переменные, объявленные с ключевым словом OUTPUT). С помощью выходных параметров, любые изменения являются результатом выполнения процедуры и он может быть получен после завершения выполнения процедуры.
Для использования выходного параметра, вы должны указать ключевое слово OUTPUT при создании процедуры в CREATE PROCEDURE и при выполнении в операторе EXECUTE. Если это слово опущено во время выполнения процедуры, процедура будет выполнена, но не вернёт значения. Выходной параметр имеет следующие характеристики:
Вызывающий оператор должен содержать имя переменной для получения результирующего значения. Невозможно передавать константы.
Вы можете использовать переменные в дальнейшем в дополнительных операторах Transact-SQL в вызывающей процедуре или batch.
Параметр может быть любого типа данных кроме text или image.
Следующий пример создаёт встроенную процедуру с выходным параметром:
CREATE PROCEDURE dbo.MathTutor
@m1 smallint,
@m2 smallint,
@result smallint OUTPUT
AS
SET @result = @m1*@m2
GO
Вызов этой процедуры может выглядеть следующим образом:
DECLARE @answer smallint
EXEC MathTutor 5,6, @answer OUTPUT
SELECT 'результат ',@answer
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.