Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

CTE-Fehler:Typen stimmen nicht zwischen dem Anker und dem rekursiven Teil überein

Genau das, was es sagt:

'name1' hat einen anderen Datentyp als 'name' + CAST((rn+1) as varchar(255))

Versuchen Sie dies (ungetestet)

;with cte as
(
select 1 as rn, CAST('name1' as varchar(259)) as nm
union all
select rn+1,nm = 'name' + CAST((rn+1) as varchar(255))
from cte a where rn<10)
select * from cte

Grundsätzlich muss auch auf die Länge geachtet werden. Für das rekursive Bit müssen Sie möglicherweise CAST('name' AS varchar(4)) verwenden wenn es wieder fehlschlägt