sql >> Base de Datos >  >> RDS >> Sqlserver

¿SQL Server usa EXEC/sp_executesql o simplemente sql en el procedimiento almacenado?

No veo ninguna razón para usar SQL dinámico aquí. Cuando haces necesita usar SQL dinámico, debe considerar sp_executesql más alto en preferencia que EXEC() . Hay una variedad de razones, que incluyen:

  1. sp_executesql es más probable que reutilice los planes de consulta (consulte Dynamic SQL - EXEC(@SQL) frente a EXEC SP_EXECUTESQL(@SQL) );

  2. es mucho más fácil pasar parámetros fuertemente tipados a sp_executesql (frustrar la inyección de SQL mejor que concatenar una cadena); y,

  3. también puede obtener variables desde el ámbito de SQL dinámico de vuelta al ámbito de llamada, por ejemplo:

Ese no es un ejemplo muy útil, pero es un problema común cuando se ejecutan cadenas dinámicas. Pero más concretamente, solo debe considerar SQL dinámico cuando sea necesario, no como primer recurso.