Compartir a través de


Ejecución directa

La ejecución directa es la manera más sencilla de ejecutar una instrucción. Una aplicación genera una cadena de caracteres que contiene una instrucción Transact-SQL y la envía para su ejecución utilizando la función SQLExecDirect. Cuando la instrucción llega al servidor, SQL Server la compila en un plan de ejecución y 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.

Cuando se conecte a versiones de SQL Server anteriores a la versión 7.0, debe utilizar la ejecución directa:

  • Cuando sea probable que una instrucción se ejecute menos de cuatro veces.

  • Para llamar a procedimientos almacenados.

En SQL Server 2000 y versiones posteriores, se ha mejorado considerablemente el rendimiento de la ejecución directa en instrucciones ejecutadas habitualmente en entornos multiusuario, y el uso de SQLExecDirect con marcadores de parámetros para las instrucciones SQL ejecutadas habitualmente es prácticamente tan eficaz como el de la ejecución preparada.

Cuando se conecta a una instancia de SQL Server, el controlador ODBC de SQL Server Native Client utiliza sp_executesql para transmitir la instrucción o lote de instrucciones SQL especificadas en SQLExecDirect. SQL Server contiene lógica que determina rápidamente si una instrucción o lote de instrucciones SQL ejecutadas con sp_executesql coincide con la instrucción o lote que generó un plan de ejecución existente en memoria. Si se encuentra una coincidencia, SQL Server simplemente reutiliza el plan existente en lugar de compilar un nuevo plan. Esto significa que las instrucciones SQL ejecutadas habitualmente con SQLExecDirect en un sistema con muchos usuarios se beneficiarán de muchas de las ventajas de reutilización de planes que sólo estaban disponibles para los procedimientos almacenados en las versiones anteriores de SQL Server.

Esta ventaja de reutilización de los planes de ejecución sólo 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 Usar parámetros de instrucciones.

  • 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 proveedor ODBC de SQL Server Native Client y el proveedor OLE DB de SQL Server Native Client proporcionan la misma configuración predeterminada para estas opciones.

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