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:
-
sp_executesql
es más probable que reutilice los planes de consulta (consulte Dynamic SQL - EXEC(@SQL) frente a EXEC SP_EXECUTESQL(@SQL) ); -
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, -
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.