¿Cuáles son los pros y los contras del mundo real de ejecutar un comando SQL dinámico en un procedimiento almacenado en SQL Server usando
EXEC (@SQL)
versus
EXEC SP_EXECUTESQL @SQL
?
sql
sql-server
dynamic
Máquina de ceniza
fuente
fuente
El artículo de Microsoft Using sp_executesql recomienda usar en
sp_executesql
lugar de unaexecute
declaración.Entonces, para llevar: No use
execute
declaración . Utilicesp_executesql
.fuente
sp_executesql
que no se puede usar para reemplazarexecute
. Quizás debería poner el punto que estoy tratando de enfatizar como: Úselo ensp_executesql
lugar deexecute
siempre que sea posible .Siempre usaría sp_executesql en estos días, todo lo que realmente es es un contenedor para EXEC que maneja parámetros y variables.
Sin embargo, no se olvide de OPTION RECOMPILE cuando ajuste consultas en bases de datos muy grandes, especialmente cuando tenga datos distribuidos en más de una base de datos y utilice una RESTRICCIÓN para limitar los análisis de índices.
A menos que use OPTION RECOMPILE, el servidor SQL intentará crear un plan de ejecución de "talla única" para su consulta, y ejecutará un escaneo de índice completo cada vez que se ejecute.
Esto es mucho menos eficiente que una búsqueda, y significa que potencialmente está escaneando índices completos que están restringidos a rangos que ni siquiera está consultando: @
fuente
ejecutar el comando
fuente
int
en SQL dinámico. Tenga en cuenta que @sql se declara comovarchar
onvarchar