sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2012:limitación de SQL dinámico (> 4000 caracteres) (dividido)

No es necesario dividir el texto en partes. Debe asegurarse de que no se trunque mientras está cadenas de concatenación :

Por lo tanto, asegúrese de que la primera concatenación esté funcionando con un tipo de valor grande (y, por lo tanto, produzca un tipo de valor grande como resultado) y todas las concatenaciones posteriores deben guardarse del truncamiento:

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

(De esta manera, no tiene que insertar conversiones en todas partes )

Esto genera un error:

declare @t nvarchar(max)

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

exec sp_executesql @t

Y esto produce el resultado 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