Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2012:limitação dinâmica do SQL (> 4000 caracteres) (dividido)


Você não precisa dividir o texto em partes. Você precisa garantir que o truncamento não ocorra enquanto você estiver concatenando strings :

Portanto, verifique se a primeira concatenação está funcionando com um tipo de valor grande (e, portanto, produz um tipo de valor grande como resultado) e cada concatenação subsequente deve ser salva do truncamento:
set @template=CONVERT(nvarchar(max),'if NOT EXISTS(select * from ' ) + @DestinationDB + ...

(Dessa forma, você não precisa inserir conversões em todos os lugares )

Isso gera um erro:
declare @t nvarchar(max)

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

exec sp_executesql @t

E isso produz o 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