Database/MSSQL

Table Valued Parameters(TVP)

달빛에취하다 2016. 8. 1. 12:30

TVP(테이블 반환 매개 변수)는 Table 구조의 Type을 생성 후 해당 타입을 매개변수 형태로 사용합니다.

제가 사용한 경우는 WHERE 절에 사용되는 스칼라 함수 내에서 CTE가 따로 돌고 있는 상황이었습니다. 꼭 사용해야 하는 경우라서.

프러시저나 함수등에 매개변수 형태도 던져 사용하거나 반환값으로 사용 가능합니다.

자세한 사항은 아래 링크를 확인해 주세요.

https://msdn.microsoft.com/ko-kr/library/bb510489(v=sql.105).aspx


USE AdventureWorks2008R2;
GO

/* Create a table type. */
CREATE TYPE LocationTableType AS TABLE 
( LocationName VARCHAR(50)
, CostRate INT );
GO

/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE usp_InsertProductionLocation
    @TVP LocationTableType READONLY
    AS 
    SET NOCOUNT ON
    INSERT INTO [AdventureWorks2008R2].[Production].[Location]
           ([Name]
           ,[CostRate]
           ,[Availability]
           ,[ModifiedDate])
        SELECT *, 0, GETDATE()
        FROM  @TVP;
        GO

/* Declare a variable that references the type. */
DECLARE @LocationTVP 
AS LocationTableType;

/* Add data to the table variable. */
INSERT INTO @LocationTVP (LocationName, CostRate)
    SELECT [Name], 0.00
    FROM 
    [AdventureWorks2008R2].[Person].[StateProvince];

/* Pass the table variable data to a stored procedure. */
EXEC usp_InsertProductionLocation @LocationTVP;
GO