매개 변수 기본값 지정
저장 프로시저를 만들 때 선택적 매개 변수에 기본값을 지정할 수 있습니다. 저장 프로시저가 실행될 때 다른 값이 지정되지 않았으면 기본값이 사용됩니다.
저장 프로시저에서 매개 변수에 기본값을 지정하지 않고 호출 프로그램이 저장 프로시저를 실행할 때 매개 변수에 값을 제공하지 않으면 시스템 오류가 반환되기 때문에 기본값을 지정해야 합니다.
매개 변수에 알맞은 기본값을 지정할 수 없을 때는 NULL을 기본값으로 지정한 다음, 매개 변수에 값을 제공하지 않고 저장 프로시저를 실행하는 경우 저장 프로시저가 사용자 지정 메시지를 반환하도록 할 수 있습니다.
[!참고]
기본값이 공백 또는 문장 부호가 포함된 문자열이거나 6xxx와 같이 숫자로 시작하면 기본값을 하나의 작은따옴표로 묶어야 합니다.
예
다음 예는 한 개의 입력 매개 변수 @SalesPerson을 사용하여 usp_GetSalesYTD 프로시저를 만듭니다. 매개 변수 기본값으로 NULL이 할당되고, @SalesPerson 매개 변수에 대해 값을 지정하지 않고 저장 프로시저를 실행할 경우 사용자 지정 오류 메시지를 반환하는 오류 처리 문에서 이 값이 사용됩니다.
USE AdventureWorks;
GO
IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL
DROP PROCEDURE Sales.uspGetSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetSalesYTD
@SalesPerson nvarchar(50) = NULL -- NULL default value
AS
SET NOCOUNT ON;
-- Validate the @SalesPerson parameter.
IF @SalesPerson IS NULL
BEGIN
PRINT 'ERROR: You must specify the last name of the sales person.'
RETURN
END
-- Get the sales for the specified sales person and
-- assign it to the output parameter.
SELECT SalesYTD
FROM Sales.SalesPerson AS sp
JOIN HumanResources.vEmployee AS e ON e.EmployeeID = sp.SalesPersonID
WHERE LastName = @SalesPerson;
RETURN
GO
다음 예는 저장 프로시저를 실행합니다. 첫 번째 문은 입력 값을 지정하지 않고 저장 프로시저를 실행하므로 저장 프로시저의 오류 처리 문이 사용자 지정 오류 메시지를 반환합니다. 두 번째 문은 입력 값을 제공하고 예상 결과 집합을 반환합니다.
-- Run the stored procedure without specifying an input value.
EXEC Sales.usp_GetSalesYTD;
GO
-- Run the stored procedure with an input value.
EXEC Sales.usp_GetSalesYTD N'Blythe';
GO
다음 예는 세 매개 변수 @first, @second 및 @third에 각각 기본값이 제공된 my_proc 저장 프로시저와 다른 매개 변수 값으로 이 저장 프로시저를 실행할 때 표시되는 값을 보여 줍니다.
IF OBJECT_ID('dbo.my_proc', 'P') IS NOT NULL
DROP PROCEDURE dbo.my_proc;
GO
CREATE PROCEDURE dbo.my_proc
@first int = NULL, -- NULL default value
@second int = 2, -- Default value of 2
@third int = 3 -- Default value of 3
AS
SET NOCOUNT ON;
SELECT @first, @second, @third;
GO
EXECUTE dbo.my_proc; -- No parameters supplied
GO
결과 집합은 다음과 같습니다.
NULL 2 3
EXECUTE dbo.my_proc 10, 20, 30;-- All parameters supplied
GO
결과 집합은 다음과 같습니다.
10 20 30
EXECUTE dbo.my_proc @second = 500; -- Only second parameter supplied by name
GO
결과 집합은 다음과 같습니다.
NULL 500 3
EXECUTE dbo.my_proc 40, @third = 50 -- Only first and third parameters
-- are supplied.
결과 집합은 다음과 같습니다.
40 2 50