Quais são os prós e contras do mundo real de executar um comando SQL dinâmico em um procedimento armazenado no SQL Server usando
EXEC (@SQL)
versus
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Ash Machine
fonte
fonte
O artigo Usando sp_executesql da Microsoft recomenda o uso em
sp_executesql
vez daexecute
instrução.Portanto, a conclusão: Não use
execute
declaração . Usesp_executesql
.fonte
sp_executesql
que não pode ser usado para substituirexecute
. Talvez eu deva colocar o ponto que estou tentando enfatizar como: Use emsp_executesql
vez deexecute
sempre que possível .Eu sempre usaria sp_executesql atualmente, tudo o que realmente é é um invólucro para EXEC que lida com parâmetros e variáveis.
No entanto, não se esqueça de OPTION RECOMPILE ao ajustar consultas em bancos de dados muito grandes, especialmente quando você tiver dados estendidos por mais de um banco de dados e estiver usando CONSTRAINT para limitar as varreduras de índice.
A menos que você use OPTION RECOMPILE, o SQL server tentará criar um plano de execução "tamanho único" para sua consulta e executará uma varredura completa do índice cada vez que for executado.
Isso é muito menos eficiente do que uma busca e significa que está potencialmente verificando índices inteiros que são restritos a intervalos que você nem mesmo está consultando: @
fonte
execute o comando
fonte
int
em SQL dinâmico. Observe que @sql é declarado comovarchar
ounvarchar