Ejecución directa

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

La ejecución directa es la manera más sencilla de ejecutar una instrucción. Una aplicación compila una cadena de caracteres que contiene una instrucción Transact-SQL y la envía para su ejecución mediante la función SQLExecDirect . Cuando la instrucción llega al servidor, SQL Server la compila en un plan de ejecución y, a continuación, ejecuta inmediatamente el plan de ejecución.

La ejecución directa se utiliza habitualmente en las aplicaciones que generan y ejecutan instrucciones en tiempo de ejecución y es el método más eficaz para las instrucciones que se van a ejecutar una sola vez. El inconveniente cuando se utiliza la ejecución directa con muchas bases de datos es que la instrucción SQL se debe analizar y compilar cada vez que se ejecuta, lo que supone una sobrecarga si la instrucción se ejecuta varias veces.

SQL Server mejora significativamente el rendimiento de la ejecución directa de instrucciones ejecutadas normalmente en entornos multiusuario y el uso de SQLExecDirect con marcadores de parámetro para instrucciones SQL ejecutadas normalmente puede abordar la eficacia de la ejecución preparada.

Cuando se conecta a una instancia de SQL Server, el controlador ODBC de SQL Server Native Client usa sp_executesql para transmitir la instrucción SQL o el lote especificado en SQLExecDirect. SQL Server tiene lógica para determinar rápidamente si una instrucción SQL o un lote ejecutados con sp_executesql coincide con la instrucción o lote que generó un plan de ejecución que ya existe en la memoria. Si se realiza una coincidencia, SQL Server simplemente reutiliza el plan existente en lugar de compilar un nuevo plan. Esto significa que las instrucciones SQL ejecutadas normalmente con SQLExecDirect en un sistema con muchos usuarios se beneficiarán de muchas de las ventajas de reutilización del plan que solo estaban disponibles para los procedimientos almacenados en versiones anteriores de SQL Server.

Esta ventaja de reutilización de los planes de ejecución solo funciona cuando varios usuarios ejecutan la misma instrucción o lote de instrucciones SQL. Siga estas convenciones de codificación para aumentar la probabilidad de que las instrucciones SQL ejecutadas por clientes diferentes sean lo suficientemente similares para poder reutilizar planes de ejecución:

  • No incluya constantes de datos en las instrucciones SQL; utilice en su lugar marcadores de parámetros enlazados a variables del programa. Para obtener más información, vea Using Statement Parameters.

  • Utilice nombres de objeto completos. Los planes de ejecución no se reutilizan si los nombres de objeto no son completos.

  • Haga que las conexiones de la aplicación utilicen siempre que sea posible un conjunto común de opciones de conexión e instrucción. Los planes de ejecución generados para una conexión con un conjunto de opciones (como ANSI_NULLS) no se reutilizan para una conexión que tiene otro conjunto de opciones. El controlador ODBC SQL Server Native Client y el proveedor OLE DB de SQL Server Native Client tienen la misma configuración predeterminada para estas opciones.

Si todas las instrucciones ejecutadas con SQLExecDirect se codifican mediante estas convenciones, SQL Server pueden reutilizar los planes de ejecución cuando surja la oportunidad.

Consulte también

Ejecución de instrucciones (ODBC)