2
SSRS RDL 문서를 제공하기위한 SQL 스크립트에서 CTE를 반복적으로 사용하여 데이터를 가져 오려고합니다.NULL 앵커가 NOT NULL 필드에서 반복 될 때 CTE의 형식 불일치 문제를 해결하는 방법
실제 SQL 코드는 여기 CopyPaste에에 너무 큰하지만이 짧은 생식 만들어이 같은
declare @temp table
(
id uniqueidentifier not null default(newid()),
name varchar(100) not null default('new'),
value varchar(100) not null default('newValue'),
parentid uniqueidentifier null
)
insert into @temp (id, name, value, parentid) values ('12312312-1234-1234-1234-123412341234', 'o1', 'val1', null)
insert into @temp (id, name, value, parentid) values ('12312312-1234-1234-1234-123412341235', 'o2', 'val2', '12312312-1234-1234-1234-123412341234')
insert into @temp (id, name, value, parentid) values ('12312312-1234-1234-1234-123412341236', 'o3', 'val3', '12312312-1234-1234-1234-123412341234')
;with
cte(id,name, value, pid, pname, pvalue) as (
select id, name, value, null, null, null from @temp where parentid is null
union all
select r.id, r.name, r.value, a.id, a.name, a.value
from @temp r inner join cte a
on a.id = r.parentid
)
select * from cte
CTE에 오류 출력 (2012 SSMS에서 테스트) :
Msg 240, Level 16, State 1, Line 13
Types don't match between the anchor and the recursive part in column "pid" of recursive query "cte".
Msg 240, Level 16, State 1, Line 13
Types don't match between the anchor and the recursive part in column "pname" of recursive query "cte".
Msg 240, Level 16, State 1, Line 13
Types don't match between the anchor and the recursive part in column "pvalue" of recursive query "cte".
을 나는 이것이 재귀 부분에서 반입 된 NOT NULL 필드와는 대조적으로 앵커 부분에서 선택된 NULL 값 때문이라고 확신한다 ...이 문제는 해결 될 수 있습니까?
는 (나는이 작업을 달성하는 다른 방법에 열려있어.) 리터럴 null
값이 일치하는
사실 'NULL'로 간주되는 기본값은 'INT'입니다. –
감사합니다 마틴, 당신이 대답을 팝업 수도 있습니다. 편집 된 광산. –
향후 독자의 혼란을 피하기 위해 질문의 테이블 사양과 일치하도록 코드를 변경했습니다. – Alex