/********************************************************************************************
-- Title : [2k8] CLR function 사용시 힌트 에러
-- Key word : clr function dll 함수
********************************************************************************************/
DLL 테이블함수를 사용하는 뷰1를 참조하여 뷰2를 만든 후 해당 뷰2를 조회할때 다음과 같은
오류가 발생할 수 있습니다.
메시지 4139, 수준 16, 상태 1, 줄 2
이 쿼리는 뷰 "schema2.tbl2"을(를) 통해 힌트가 있는 CLR(공용 언어 런타임) 테이블 반환 함수 "CLR.dbo.fn_ttt"을(를) 참조하므로 처리할 수 없습니다.
이때, 뷰2에서 참조하는 뷰1의 nolock 힌트를 제거해 주세요.
예)
-- 스탠다드
ALTER VIEW schema2.tbl2
AS
SELECT b.*
FROM schema1.tbl2_b a with(nolock)
CROSS APPLY CLR.dbo.fn_ttt(a.pk, a.seq, a.tbl_number, a.tbl_date, a.tbl_guest) b;
--> DLL 테이블 함수 참조
-- 서비스
ALTER VIEW schema.tbl
AS
SELECT b.pk1
, a.seq
, a.tbl_number
, a.tbl_date
, a.tbl_guest
, a.section
, modify = 1
FROM schema2.tbl2 AS a WITH (NOLOCK) --> nolock제거
INNER JOIN schema4.groups AS b WITH (NOLOCK)
ON a.pk = b.pk and svc = 1;
GO