je reçois l'erreur suivante lorsque je tente d'exécuter un CTE récursive particulier:T-SQL CTE Erreur: les types ne correspondent pas entre l'ancre et la partie récursive
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".
Cela n'a aucun sens. Chaque champ est explicitement converti en VARCHAR(MAX)
. S'il vous plaît aidez-moi. J'ai lu beaucoup de réponses à ce problème, ici et ailleurs, qui conseillent explicitement de lancer la colonne en question. Je fais déjà ceci, et obtiens toujours l'erreur.
Ce code reproduira l'erreur:
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('[email protected]' as varchar(max)));
insert into #towner values (cast('tsql rage' as varchar(max)));
insert into #towner values (cast('[email protected]' 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;
Si vous trouvez pertinent, SELECT left(@@VERSION, 70)
retours:
Microsoft SQL Server 2005 - 9.00.4053.00 (X64) May 26 2009 14:13:01
La requête fonctionne pour moi SS05 (X86 bien). Et, ça marche aussi sur mon SS08. Désolé, pas beaucoup d'aide là-bas, sauf que vous avez une bonne requête pour les autres versions. – bobs
Ne fonctionne pas pour moi dans SS08 SP1 x86. –
Cela ne fonctionne pas totalement sur mon instance SQL Server 2008 R2 Developer x64. Problème intéressant Ça commence à me sentir comme un insecte. Je veux dire, vous avez vraiment fait du bon boulot. –