Bạn không cần phải chia văn bản thành nhiều phần. Bạn cần đảm bảo rằng việc cắt ngắn không xảy ra khi bạn đang nối các chuỗi :
Vì vậy, hãy đảm bảo rằng phép nối đầu tiên đang hoạt động với kiểu giá trị lớn (và do đó tạo ra kiểu giá trị lớn là kết quả của nó) và mọi phép nối tiếp theo phải được lưu khỏi kiểu cắt bớt:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(Bằng cách này, bạn không phải chèn chuyển đổi ở mọi nơi )
Điều này tạo ra lỗi:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
Và điều này tạo ra kết quả 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