最終的に SSRS RDL ドキュメントをフィードする予定の SQL スクリプトで、CTE を活用してデータを再帰的に取得しようとしています。
実際の SQL コードは大きすぎてここにコピーペーストできませんが、この短い再現コードを作成しました。
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 エラーは次のようになります (SSMS 2012 でテスト済み)。
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 値が原因であると確信しています...この問題は回避できますか?
(私は、このタスクを達成する別の方法を受け入れます。)