sp_executesql sp_execute example ejemplos sql sql-server dynamic

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

?


  1. Declara la variable
  2. 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)
  3. 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 ".