テキストをパーツに分割する必要はありません。 文字列の連結 :
そのため、最初の連結が大きな値の型で機能する (したがって、結果として大きな値の型が生成される) ことを確認し、後続のすべての連結は切り捨てから保存する必要があります:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...
(この方法では、変換をどこにでも挿入する必要はありません )
これによりエラーが発生します:
declare @t nvarchar(max)
set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'
exec sp_executesql @t
そして、これは結果 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