다음을 통해 공유


OUTPUT 매개 변수를 사용하여 데이터 반환

프로시저 정의에서 매개 변수에 OUTPUT 키워드를 지정하면 해당 저장 프로시저는 종료될 때 매개 변수의 현재 값을 호출 프로그램에 반환할 수 있습니다. 호출 프로그램에서 사용할 수 있는 변수에 매개 변수 값을 저장하려면 호출 프로그램이 저장 프로시저를 실행할 때 OUTPUT 키워드를 사용해야 합니다.

다음 예에서는 입력 및 출력 매개 변수가 있는 저장 프로시저를 보여 줍니다. 저장 프로시저의 첫 번째 매개 변수 @SalesPerson은 호출 프로그램이 지정한 입력 값을 받고 두 번째 매개 변수 @SalesYTD는 호출 프로그램에 값을 반환하는 데 사용됩니다. SELECT 문은 @SalesPerson 매개 변수를 사용하여 정확한 SalesYTD 값을 가져오고 @SalesYTD 출력 매개 변수에 이 값을 할당합니다.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID('Sales.uspGetEmployeeSalesYTD', 'P') IS NOT NULL
    DROP PROCEDURE Sales.uspGetEmployeeSalesYTD;
GO
CREATE PROCEDURE Sales.uspGetEmployeeSalesYTD
@SalesPerson nvarchar(50),
@SalesYTD money OUTPUT
AS  

    SET NOCOUNT ON;
    SELECT @SalesYTD = SalesYTD
    FROM Sales.SalesPerson AS sp
    JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID
    WHERE LastName = @SalesPerson;
RETURN
GO

다음 문에서는 입력 매개 변수에 값을 지정하여 저장 프로시저를 실행하고 저장 프로시저의 출력 값을 호출 프로그램의 지역 변수인 @SalesYTD에 저장합니다.

-- Declare the variable to receive the output value of the procedure.
DECLARE @SalesYTDBySalesPerson money;
-- Execute the procedure specifying a last name for the input parameter
-- and saving the output value in the variable @SalesYTDBySalesPerson
EXECUTE Sales.uspGetEmployeeSalesYTD
    N'Blythe', @SalesYTD = @SalesYTDBySalesPerson OUTPUT;
-- Display the value returned by the procedure.
PRINT 'Year-to-date sales for this employee is ' + 
    convert(varchar(10),@SalesYTDBySalesPerson);
GO

저장 프로시저를 실행할 때 OUTPUT 매개 변수에 입력 값을 지정할 수도 있습니다. 이렇게 하면 저장 프로시저가 호출 프로그램으로부터 값을 받아 변경하거나 연산을 수행한 다음 호출 프로그램에 새 값을 반환할 수 있습니다. 위 예에서는 저장 프로시저를 실행하기 전에 @SalesYTDBySalesPerson 변수에 값을 할당할 수 있습니다. @SalesYTD 변수에는 저장 프로시저의 본문에 있는 매개 변수 값이 포함되며 @SalesYTD 변수 값은 저장 프로시저가 종료될 때 호출 프로그램에 반환됩니다. 이것을 "참조 전달(pass-by-reference) 기능"이라고 합니다.

저장 프로시저를 실행할 때 매개 변수에 OUTPUT을 지정하는 경우 저장 프로시저의 OUTPUT을 사용하여 이 매개 변수를 정의하지 않으면 오류 메시지가 나타납니다. OUTPUT 매개 변수가 있는 저장 프로시저를 실행할 수는 있지만 저장 프로시저를 실행할 때는 OUTPUT을 지정할 수 없습니다. 오류가 반환되지는 않지만 호출 프로그램에서 출력 값을 사용할 수 없습니다.