Sintaxe básica de instruções SQL dinâmicas
1: Instruções SQL comuns podem ser executadas com Exec
por exemplo: Selecione * em tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' - Observe que N deve ser adicionado antes da string
2: Quando nomes de campos, nomes de tabelas, nomes de bancos de dados, etc. são usados como variáveis, SQL dinâmico deve ser usado
por exemplo:
declare @fname varchar(20)
set @fname = 'NomeArquivo'
Selecione @fname em tableName - Erro, nenhum erro será solicitado, mas o resultado é um valor fixo FiledName, que não é o que você deseja.
Exec('select ' + @fname + 'from tableName') - Observe que há espaços entre aspas simples antes e depois do sinal de mais.
Claro, você também pode alterar a string para um formato variável
declare @fname varchar(20)
set @fname = 'FiledName' --Defina o nome do campo
declare @s varchar(1000)
set @s = 'select' + @fname + 'de tableName'
Exec(@s) – sucesso
exec sp_executesql @s – esta frase reportará um erro
declare @s Nvarchar(1000) - observe que ele foi alterado para nvarchar(1000)
set @s = 'select' + @fname + 'de tableName'
Exec(@s) – sucesso
exec sp_executesql @s – Esta frase está correta
3. Parâmetros de saída
declare @num int,
@sqlsnvarchar(4000)
set @sqls='selecione contagem(*) de nomedatabela'
exec(@sqls)
--Como colocar o resultado da execução do exec em uma variável?
declare @num int,
@sqlsnvarchar(4000)
set @sqls='select @a=count(*) de tableName '
exec sp_executesql @sqls,N'@a saída int',@num saída
selecione @num
Se você quiser usar aspas simples '' na string de instrução SQL, você pode usar ''''