A variável @SQL na declaração abaixo é sempre truncada quando eu "inline" uma variável. Se eu enviar a variável e imprimir, ela não trunca para 4000, no entanto, não consigo vincular a variável enviada em uma declaração USE [@DatabaseName]. Como contornar.
Isso funciona, no entanto, o nome do banco de dados é codificado na instrução USE
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE [MyDatabase]
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
Isso gera uma exceção com a mensagem ' O banco de dados '@DatabaseName' não existe. Certifique-se de que o nome foi inserido corretamente .'
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE [@DatabaseName]
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
Isso trunca a consulta para NVARCHAR(4000)
DECLARE @DatabaseName NVARCHAR(MAX) = 'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
'
USE ['+@DatabaseName+']
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) ='@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
Também tentei usar N'string' sem sucesso
DECLARE @DatabaseName NVARCHAR(MAX) = N'MyDatabase'
DECLARE @Sql NVARCHAR(MAX)=
N'
USE ['+@DatabaseName+']
PRINT @DatabaseName
SELECT
...<20,000 more chars
'
DECLARE @params NVARCHAR(MAX) =N'@DatabaseName NVARCHAR(MAX)'
EXEC sp_executesql @SQL, @params,@DatabaseName
Acho que entendo por que isso USE [@Variable]
não funciona, enquanto não sei como explicar por que USE ['+@Variable+']
está sendo truncado para 4000 quando ambas as variáveis estão no máximo, a menos que o SQL Server esteja fazendo a conversão para baixo sp_executesql
.
De qualquer forma, alguém sabe de uma solução alternativa para fazer isso funcionar? Eu basicamente quero direcionar dinamicamente qualquer banco de dados com uma instrução sql maior que 4000 nchars.