sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server 2012:dynamisk SQL-begränsning (> 4000 tecken) (delad)

Du behöver inte dela upp texten i delar. Du måste se till att trunkering inte sker medan du är sammanfogande strängar :

Så se till att den första sammanfogningen fungerar med en stor värdetyp (och därmed ger en stor värdetyp som resultat) och att varje efterföljande sammanfogning ska sparas från trunkering:

set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...

(På detta sätt behöver du inte infoga omvandlingar överallt )

Detta genererar ett fel:

declare @t nvarchar(max)

set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'

exec sp_executesql @t

Och detta ger resultatet 9000:

declare @t nvarchar(max)

set @t = CONVERT(nvarchar(max),'select LEN(''') + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'

exec sp_executesql @t


  1. Räkna hur många rader som infogats från senaste SQL-fråga

  2. Vanliga fel vid migrering av PostgreSQL-databaser från On-Prem till AWS RDS

  3. Mysql tidszon på Windows 7 inte uppdaterad

  4. Informix motsvarande mysqls SHOW CREATE TABLE