728x90


1. 테이블처럼 생성하고 싶은 함수를 생성한다.

CREATE FUNCTION 함수명
(
 @조건1 VARCHAR(100),
 @조건2 VARCHAR(100),
)
RETURN TABLE
AS
RETURN
(
 SELECT *
 FROM 테이블명
 WHERE 조건1 = @조건1
 AND 조건2 = @조건2
)


2. 생성 후 조회 방법
테이블과 같이 조회 가능하고 WHERE절도 똑같이 사용가능하다.

SELECT *
FROM 함수명('조건1', '조건2')

table함수는 스칼라함수와는다르게 함수명만 적어주면 사용이 가능하다.

테이블함수의 제약
- 저장프로시져처럼 여러개의 결과 테이블을 반환할 수 없다. 오직 한개의 결과 테이블만 반환한다.
- 원하는 형태의 테이블을 만들어 낼 수는 있지만 그 결과는 단 하나의 Select문 이어야 한다.
- 함수내부에서 업데이트 작업을 수행할 수 없다.
- 동적 execute 함수로 테이블을 반환할 수 없다. (execute ('select * from test') 와 같은 형태는 불가

테이블함수
* 값을 테이블형태로 넘겨준다. 넘겨주는 테이블은 한개이상이 될 수 없다.
* 테이블함수는 스칼라함수와 다르게 함수명만 적어주면 된다.

 view와의 차이점
* view의 경우 조건지정이 불가능하다.(where문을 사용못하는 것이 아니라 유동적인 조건 지정이 불가능한 것이다.) 예를들어 view의 경우 2005, 2006, 2007년도의 데이터가 각각 필요할 경우 해당하는 조건에 맞는 view를 모두 따로 생성하여야 하지만 테이블함수의 경우 한개만 만들어두고 넘겨주는 값만 다르게 하여 사용할 수 있는 것이다.

저장프로시져와의 차이점
* 저장프로시져의 경우 일단 모두 받은후에 C#이나 해당 프로그램상에서 코드로 정리하는 작업을 진행하여야 하나 테이블함수의 경우 원하는 데이터를 간추린후 다시한번 더 원하는 결과를 출력할 수 있는 장점이 있다.



728x90

+ Recent posts