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

SQL Server usa EXEC/sp_executesql ou simplesmente sql no procedimento armazenado?


Não veja nenhuma razão para usar SQL dinâmico aqui. Quando você faz precisa usar SQL dinâmico, você deve considerar sp_executesql maior preferência do que EXEC() . Há uma variedade de razões, incluindo:

  1. sp_executesql é mais provável que reutilize planos de consulta (consulte SQL dinâmico - EXEC(@SQL) versus EXEC SP_EXECUTESQL(@SQL) );

  2. é muito mais fácil passar parâmetros fortemente tipados para sp_executesql (impedindo a injeção de SQL melhor do que concatenar uma string); e,

  3. você também pode obter variáveis ​​de dentro do escopo SQL dinâmico de volta para o escopo de chamada, por exemplo:

Esse não é um exemplo muito útil, mas é um problema comum ao executar strings dinâmicas. Mas indo direto ao ponto, você só deve considerar o SQL dinâmico quando for necessário, não como um primeiro recurso.