예를 들어 다음과 같은 두개의 함수가 있습니다.
/* 임의의 문자열을 반환하는 스칼라 함수 */
CREATE FUNCTION ufTestKey ( @InData varchar(1) )
RETURNS varchar(4)
AS
BEGIN
DECLARE @TblKey varchar(4)
IF @InData = '1'
SET @TblKey = '2003'
ELSE IF @InData = '2'
SET @TblKey = '2004'
ELSE IF @InData = '3'
SET @TblKey = '2005'
RETURN (@TblKey)
END
/* 테이블을 반환하는 함수 */
CREATE FUNCTION ufTestData ( @TblKey varchar(3) )
RETURNS @RetTbl TABLE ( JuminId varchar (20) PRIMARY KEY NOT
NULL,
DeptCd varchar (12) NULL ,
UserNm varchar (12) NULL
)
AS
BEGIN
INSERT @RetTbl
SELECT JuminId, DeptCd, UserNm
FROM gEmp
WHERE JuminId LIKE @TblKey + '%'
RETURN
END
위 두개의 함수를 이용 하여 다음 1), 2)와 같이 각각 사용하는데는
문제가 없습니다.
다만 문제는 3)과 같이 사용하고자 할때 발생합니다.
즉 스칼라함수의 리턴값을 테이블반환함수의 매개변수값으로
사용하고자
할때 발생합니다. 이게 원래 제약이 있는것인지 아니면 사용용법이
잘못된
것인지 궁금합니다.
1) select dbo.ufTestKey('2')
----
2004
(1개 행 적용됨)
2) select * from dbo.ufTestData('2004')
JuminId DeptCd UserNm
-------------------- ------------ ------------
2004010003 NULL 류재근
200401001 200406B111 성삼환
200401002 200406B123 류재근
200401009 NULL 김희수
200401010 NULL 김용민
200402001 200406B211 박명현
200403001 NULL 김도욱
200403002 200406A311 박명현
200405001 NULL 최관우
200405002 200406F142 박명현
200405003 NULL 한민규
200405004 200406B121 박명현
200408001 NULL 권우석
200501001 200406B112 우종철
20050302 NULL 오대규
20050303 200406A111 dheorb
(16개 행 적용됨)
3) select * from dbo.ufTestData(dbo.ufTestKey('2'))
서버: 메시지 170, 수준 15, 상태 1, 줄 1
줄 1: '.' 근처의 구문이 잘못되었습니다.
- 끝 -
|