Non è necessario dividere il testo in parti. Devi assicurarti che il troncamento non si verifichi mentre sei stringhe concatenate :
Quindi, assicurati che la prima concatenazione funzioni con un tipo di valore grande (e quindi produca un tipo di valore grande come risultato) e ogni concatenazione successiva dovrebbe essere salvata dal troncamento:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(In questo modo, non devi inserire conversioni ovunque )
Questo genera un errore:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
E questo produce il risultato 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