sql >> Databasteknik >  >> RDS >> Sqlserver

CTE-fel:Typerna matchar inte mellan ankaret och den rekursiva delen

Exakt vad det står:

'name1' har en annan datatyp än 'name' + CAST((rn+1) as varchar(255))

Prova detta (otestat)

;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

I grund och botten måste du se till att längden matchar också. För den rekursiva biten kan du behöva använda CAST('name' AS varchar(4)) om det misslyckas igen



  1. Hur tar jag bort alla dubbletter i en MySQL-tabell utan temporära tabeller

  2. Hur man använder rollerna som har ändrats i MySQL 8.0

  3. Infogar rader i en tabell med endast en IDENTITY-kolumn

  4. Hur man skapar VARRAYs som databasobjekt i Oracle Database