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