[MSSQL] 테이블 반환 함수(Table-Valued User-Defined Functions)(TVFs)

Database/MSSQL

▶ 개요

테이블 반환 함수는 뷰 대신해서 table 데이터 형식을 반환 할 수 있다.

테이블 반환 함수는 inline TVFs 와 MultiStatement TVFs 으로 구분가능하다.


▶ 구성

1) inline TVFs


CREATE FUNCTION [함수명]

(@_param1 [parameter type], @_param2 [parameter type] ...)

RETURNS TABLE 

AS

RETURN 

(

SELECT *

 FROM [table_1]

WHERE [column_1] = @_param1

  AND ...

);

GO



2) MultiStatement TVFs


CREATE FUNCTION [함수명]

(@_param1 [parameter type], @_param2 [parameter type] ...)

RETURNS [반환할 테이블변수명] TABLE ( column_1 [column_1 type], column_2 [column_2 type] ... )

AS

BEGIN

DECLARE @_var int

...

INSERT [반환할 테이블변수명]

SELECT column_1

, column_2

 FROM [table_1]

WHERE [column_3] = @_param1

  AND ...

RETURN 

END

GO


inline TVFs와 MultiStatement TVFs 차이는 BEGIN ~ END 선언부가 없다.

inline TVFs는 바로 RETURN 절에서 반환 집합을 계산한다.

MultiStatement TVFs는 반환테이블의 정의 및 다중 T-SQL 구문 사용 가능하다.


▶ 뷰, inline TVFs, MultiStatement TVFs 비교



 

Views

 

Inline TVFs

 

MultiStatement TVFs

매개변수 허용여부( Accepts Parameters)

 N

 Y

 Y

Expanded out by Optimiser

 Y

 Y

 N

 Can be Materialized in advance 

 Y

 N

 N

 Is Updatable

 Y

 Y

 N

다중 T-SQL 사용 가능여부
Can contain Multiple Statements)

 N

 N

 Y

 Can have triggers

 Y

 N

 N

 Can use side-effecting operator

 Y

 N

 N



▶ 출처

https://technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx

http://stackoverflow.com/questions/4960137/table-valued-functiontvf-vs-view

http://www.mssql.org/LectureSQL/02_sql2k/ufn_04.htm