Если в хранимой процедуре для параметра определено значение по умолчанию, то оно используется, когда:
■ Не определено никакое значение для параметра, когда хранимая процедура выполняется.
■ Определено ключевое слово DEFAULT как значение параметра.
Хранимые Процедуры могут вернуть информацию вызывающей хранимой процедуре или клиенту с помощью выходных параметров и возвращаемого значения.
Выходные параметры позволяют любые изменения параметра, которые сохраняются в результате выполнения хранимой процедуры, и они будут сохранены даже после того, как хранимая процедура завершит выполнение. Чтобы использовать выходной параметр в Transact-SQL, Вы должны определить ключевое слово OUTPUT в операторах CREATE PROCEDURE и EXECUTE. Если ключевое слово OUTPUT опущено при вызове хранимой процедуры, то она выполняет все вычисления, но не возвращает измененное значение. В большинстве клиентских языках программирования, таких как Microsoft Visual C#®, по умолчанию параметр является входным, таким образом Вы должны указать назначение параметра в клиенте.
Следующий пример создает хранимую процедуру, которая добавляет новый отдел в таблицуHumanResources.Departmentбазы данных AdventureWorks.
CREATE PROC HumanResources.AddDepartment
@Name nvarchar(50), @GroupName nvarchar(50),
@DeptID smallint OUTPUT
AS
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (@Name, @GroupName)
SET @DeptID = SCOPE_IDENTITY()
Выходной параметр @DeptIDсохраняет идентификатор новой записи, с помощью вызова функции SCOPE_IDENTITY для того, чтобы вызывающее приложение могло немедленно обратиться по автоматически сгенерированному идентификационному номеру.
Следующий пример показывает, как вызывающее приложение может сохранить результаты выполнения хранимой процедуры, используя локальную переменную @dept.
DECLARE @dept int
EXEC AddDepartment 'Refunds', '', @dept OUTPUT
SELECT @dept
Вы можете также возвратить информацию из хранимой процедуры с помощью оператора RETURN. Этот метод более ограниченный, чем использование выходных параметров, потому что возвращается только одно целочисленное значение. Оператор RETURN обычно используется для возврата результата состояния или кода ошибки процедуры.
Следующий пример изменяет хранимуюпроцедуруAddDepartment, чтобы возвратить результат ее выполнения – успешное или неудачное.
ALTER PROC HumanResources.AddDepartment
@Name nvarchar(50), @GroupName nvarchar(50),
@DeptID smallint OUTPUT
AS
IF ((@Name = '') OR (@GroupName = ''))
RETURN -1
INSERT INTO HumanResources.Department (Name, GroupName)
VALUES (@Name, @GroupName)
SET @DeptID = SCOPE_IDENTITY()
RETURN 0
Если в процедуру передается пустая строка или для @Nameили для @GroupName, товозвращается значение параметра -1, чтобы указать ошибку. Если оператор INSERT успешно выполняется, то возвращается 0.
Следующий пример показывает, как вызывающее приложение может сохранить результат выполнения хранимой процедуры при использовании локальной переменной @result.