Du behøver ikke at dele teksten op i dele. Du skal sørge for, at trunkering ikke forekommer, mens du er sammenkædende strenge :
Så sørg for, at den første sammenkædning arbejder med en stor værditype (og dermed producerer en stor værditype som resultat), og hver efterfølgende sammenkædning skal gemmes fra trunkering:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(På denne måde behøver du ikke at indsætte konverteringer overalt )
Dette genererer en fejl:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
Og dette giver 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