example - sp_executesql ejemplos
SQL dinĂ¡mico-EXEC(@SQL) contra EXEC SP_EXECUTESQL(@SQL) (5)
¿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
?
- Declara la variable
- Configúrelo por su comando y agregue partes dinámicas como los valores de parámetro de uso de sp (aquí @IsMonday y @IsTuesday son sp params)
ejecuta el comando
declare @sql varchar (100) set @sql =''select * from #td1'' if (@IsMonday+@IsTuesday !='''') begin set @sql= @sql+'' where PickupDay in (''''''+@IsMonday+'''''',''''''+@IsTuesday+'''''' )'' end exec( @sql)
El artículo de Microsoft sobre sp_executesql recomienda utilizar sp_executesql
lugar de execute
instrucción.
Debido a que este procedimiento almacenado admite la sustitución de parámetros , sp_executesql es más versátil que EXECUTE; y porque sp_executesql genera planes de ejecución que es más probable que sean reutilizados por SQL Server, sp_executesql es más eficiente que EXECUTE.
Por lo tanto, quitar: no utilizar la instrucción de execute
. Use sp_executesql
.
Lo importante de SP_EXECUTESQL es que te permite crear consultas parametrizadas, lo cual es muy bueno si te importa la inyección de SQL.
Siempre usaría sp_executesql 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 al sintonizar consultas en bases de datos muy grandes, especialmente si tiene datos distribuidos en más de una base de datos y está usando una RESTRICCIÓN para limitar las exploraciones de índice.
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 análisis de índice completo cada vez que se ejecute.
Esto es mucho menos eficiente que una búsqueda, y significa que potencialmente analiza índices completos que están restringidos a rangos que ni siquiera está consultando: @
sp_executesql
es más probable que promueva la reutilización del plan de consulta. Cuando se utiliza sp_executesql
, los parámetros se identifican explícitamente en la firma de la llamada. Este excelente artículo describe este process .
La referencia frecuentemente citada para muchos aspectos del sql dinámico es la lectura obligatoria de Erland Sommarskog: " La maldición y las bendiciones del SQL dinámico ".