特定の再帰CTEを実行しようとすると、次のエラーが発生します。
Msg 240, Level 16, State 1, Line 8
Types don't match between the anchor and the recursive part in column "data_list" of recursive query "CTE".
これはナンセンスです。各フィールドは明示的ににキャストされVARCHAR(MAX)
ます。私を助けてください。私はこの問題に対する多くの回答をここや他の場所で読みましたが、そのすべてが問題の列を明示的にキャストすることをアドバイスしています。私はすでにこれを行っていますが、それでもエラーが発生します。
このコードはエラーを再現します:
if object_id('tempdb..#tOwner') IS NOT NULL drop table #tOwner;
CREATE TABLE #tOwner(id int identity(1,1), email varchar(max) );
insert into #towner values ( cast('123@123.321' as varchar(max)));
insert into #towner values ( cast('tsql rage' as varchar(max)));
insert into #towner values ( cast('another@e.c' as varchar(max)));
insert into #towner values ( cast('einstein.x.m' as varchar(max)));
;WITH data AS (
SELECT DISTINCT convert(varchar(max), email) datapoint FROM #tOwner
), CTE ( data_list, datapoint, length ) AS (
SELECT convert(VARCHAR(max), '' ),convert(VARCHAR(max), '' ), 0
UNION ALL
SELECT convert(VARCHAR(max),d.datapoint+';'+data_list),convert(VARCHAR(max),d.datapoint), length + 1
FROM CTE c CROSS JOIN data d WHERE d.datapoint > c.datapoint
)
SELECT D.data_list
FROM (
SELECT data_list, RANK() OVER ( PARTITION BY 1 ORDER BY length DESC )
FROM CTE
) D ( data_list, rank )
WHERE rank = 1 ;
drop table #tOwner;
関連性があると思われる場合は、次をSELECT left(@@VERSION, 70)
返します。
Microsoft SQL Server 2005 - 9.00.4053.00 (X64) May 26 2009 14:13:01