Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server 2012:limitazione SQL dinamica (> 4000 caratteri) (divisa)

Non è necessario dividere il testo in parti. Devi assicurarti che il troncamento non si verifichi mentre sei stringhe concatenate :

Quindi, assicurati che la prima concatenazione funzioni con un tipo di valore grande (e quindi produca un tipo di valore grande come risultato) e ogni concatenazione successiva dovrebbe essere salvata dal troncamento:

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

(In questo modo, non devi inserire conversioni ovunque )

Questo genera un errore:

declare @t nvarchar(max)

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

exec sp_executesql @t

E questo produce il risultato 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