No es necesario dividir el texto en partes. Debe asegurarse de que no se trunque mientras está cadenas de concatenación :
Por lo tanto, asegúrese de que la primera concatenación esté funcionando con un tipo de valor grande (y, por lo tanto, produzca un tipo de valor grande como resultado) y todas las concatenaciones posteriores deben guardarse del truncamiento:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(De esta manera, no tiene que insertar conversiones en todas partes )
Esto genera un error:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
Y esto produce el resultado 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