Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore CTE:i tipi non corrispondono tra l'ancora e la parte ricorsiva

Esattamente quello che dice:

'name1' ha un tipo di dati diverso da 'name' + CAST((rn+1) as varchar(255))

Prova questo (non testato)

;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

Fondamentalmente, devi assicurarti che anche la lunghezza corrisponda. Per il bit ricorsivo, potresti dover usare CAST('name' AS varchar(4)) se fallisce di nuovo