Nie musisz dzielić tekstu na części. Musisz upewnić się, że obcięcie nie nastąpi, gdy jesteś łączenie ciągów :
Upewnij się więc, że pierwsza konkatenacja działa z typem dużej wartości (i tym samym daje jako wynik typ dużej wartości), a każda kolejna konkatenacja powinna być zapisana przed obcięciem:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(Dzięki temu nie musisz wstawiać konwersji wszędzie )
To generuje błąd:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
A to daje wynik 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