Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server 2012:dynamische SQL-Beschränkung (> 4000 Zeichen) (geteilt)

Sie müssen den Text nicht in Teile aufteilen. Sie müssen sicherstellen, dass keine Kürzung auftritt, während Sie Strings verketten :

Stellen Sie also sicher, dass die erste Verkettung mit einem großen Werttyp arbeitet (und somit einen großen Werttyp als Ergebnis erzeugt) und jede nachfolgende Verkettung vor dem Abschneiden bewahrt werden sollte:

set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...

(Auf diese Weise müssen Sie nicht überall Conversions einfügen )

Dies erzeugt einen Fehler:

declare @t nvarchar(max)

set @t = 'select LEN(''' + REPLICATE('A',3000) + REPLICATE('B',3000) + REPLICATE('C',3000) + ''')'

exec sp_executesql @t

Und das ergibt das Ergebnis 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