Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server 2012 :limitation SQL dynamique (> 4000 caractères) (split)

Vous n'avez pas besoin de diviser le texte en parties. Vous devez vous assurer que la troncature ne se produit pas pendant que vous êtes chaînes de concaténation :

Assurez-vous donc que la première concaténation fonctionne avec un type de valeur élevé (et produit donc un type de valeur élevé comme résultat) et que chaque concaténation suivante doit être sauvegardée de la troncature :

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

(De cette façon, vous n'avez pas à insérer des conversions partout )

Cela génère une erreur :

declare @t nvarchar(max)

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

exec sp_executesql @t

Et cela produit le résultat 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