[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

[MSSQL] 스칼라 반환함수(Scalar function)(SF)

Database/MSSQL

▶ 개요

단일 값(single value) 반환

ex) GETDATE(), SUBSTRING()


▶ 구성

create function [함수명](@_param1 [parameter type], @_param2 [parameter type] ...)

returns [반환 type]

begin

declare @_rVal [반환 type] --임시변수

...

return @_rVal

end


▶ 예시 (정규식 문자열 치환)

- 구현sql

- 실행결과


▶ 출처

https://www.simple-talk.com/sql/t-sql-programming/sql-server-functions-the-basics/

http://hwoarang757.tistory.com/entry/MSSQL-%EC%96%B4%EC%84%A4%ED%94%88-RegEx-Replace-Function-%EC%97%AD%ED%95%A0-%ED%95%A8%EC%88%98-%EC%98%88%EC%A0%9C-0


[MSSQL] 사용자정의함수(User-defined Functions)(UDFs)

Database/MSSQL

▶ 구성

MSSQL에서 지원하는 사용자정의 함수는 크게 두가지로 구분된다.

- 스칼라 반환함수(Scalar function)(SF)

- 테이블 반환함수(Table Valued Function)(TVF)




▶ 사용자정의함수를 사용하는 이유는 무엇인가?

1) 중복적으로 사용되는 코드를 함수화 함으로써 재사용성을 높힙니다. 이를 통해서 생산성 향상과 무결성 유지에 도움을 줍니다.

2) 간결한 코드작성을 가능토록 하여서 코드품질을 향상시킵니다.

3) 변경사항 발생시 유지보수를 용이하게 합니다.


그 외에도 생성한 인덱스를 인위적으로 사용하기 위해서, 임시테이블사용을 피함으로서 성능향상 등의 사유로 사용되어집니다.


▶ 출처

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

http://warehouseofdev.tistory.com/entry/mssql-%EC%8A%A4%EC%B9%BC%EB%9D%BC-%ED%95%A8%EC%88%98%EC%99%80-%ED%85%8C%EC%9D%B4%EB%B8%94-%EB%B0%98%ED%99%98-%ED%95%A8%EC%88%98

http://blog.naver.com/PostView.nhn?blogId=rocabilly&logNo=140133522180

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

http://purumae.tistory.com/179