다음을 통해 공유


매개 변수 기본값 지정

저장 프로시저를 만들 때 선택적 매개 변수에 기본값을 지정할 수 있습니다. 저장 프로시저가 실행될 때 다른 값이 지정되지 않았으면 기본값이 사용됩니다.

저장 프로시저에서 매개 변수에 기본값을 지정하지 않고 호출 프로그램이 저장 프로시저를 실행할 때 매개 변수에 값을 제공하지 않으면 시스템 오류가 반환되기 때문에 기본값을 지정해야 합니다.

매개 변수에 알맞은 기본값을 지정할 수 없을 때는 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