Compartir a través de


Preparar instrucciones SQL

El motor relacional de SQL Server 2005 proporciona compatibilidad completa para preparar las instrucciones SQL antes de que se ejecuten. Si una aplicación necesita ejecutar una instrucción SQL varias veces, puede utilizar la API de bases de datos para lo siguiente:

  • Preparar la instrucción una vez. Esto compila la instrucción SQL en un plan de ejecución.
  • Ejecutar el plan de ejecución compilado previamente cada vez que necesite ejecutar la instrucción. Esto evita tener que volver a compilar la instrucción SQL después de la primera ejecución.
    Las funciones y los métodos de la API controlan la preparación y la ejecución de las instrucciones. No forma parte del lenguaje Transact-SQL. El modelo de preparación y ejecución para ejecutar instrucciones SQL es compatible con el proveedor OLE DB de SQL Native Client y el controlador ODBC de SQL Native Client. En una solicitud de preparación, el proveedor o el controlador envía la instrucción a SQL Server con una solicitud para preparar la instrucción. SQL Server compila un plan de ejecución y devuelve un identificador para ese plan al proveedor o al controlador. En una solicitud de ejecución, el proveedor o el controlador envían al servidor una solicitud para ejecutar el plan asociado al identificador.

Las instrucciones preparadas no se pueden utilizar para crear objetos temporales en SQL Server 2005. Las instrucciones preparadas no pueden hacer referencia a procedimientos almacenados del sistema que creen objetos temporales, como tablas temporales. Estos procedimientos se debe ejecutar directamente.

El uso excesivo del modelo de preparación y ejecución puede reducir el rendimiento. Si una instrucción sólo se ejecuta una vez, una ejecución directa sólo requiere un recorrido de ida y vuelta por la red al servidor. Preparar y ejecutar una instrucción SQL que sólo se ejecuta una vez requiere un recorrido de ida y vuelta adicional al servidor; uno para preparar la instrucción y otro para ejecutarla.

Preparar una instrucción es más eficaz si se utilizan marcadores de parámetros. Por ejemplo, suponga que se solicita ocasionalmente a una aplicación que recupere información de productos de la base de datos de ejemplo AdventureWorks. Hay dos maneras en que la aplicación puede llevarlo cabo.

En la primera, la aplicación puede ejecutar una consulta independiente para cada producto que se solicta:

SELECT * FROM AdventureWorks.Production.Product
WHERE ProductID = 63

En la segunda, la aplicación hace lo siguiente:

  1. Prepara una instrucción que contiene un marcador de parámetros (?):

    SELECT * FROM AdventureWorks.Production.Product
    WHERE ProductID = ?
    
  2. Enlaza una variable de programa al marcador de parámetros.

  3. Cada vez que se necesite información de productos, llena la variable enlazada con el valor de clave y ejecuta la instrucción.

La segunda forma es más eficaz cuando la instrucción se ejecuta más de tres veces.

En SQL Server 2005, el modelo de preparación y ejecución no ofrece una ventaja clara de rendimiento frente a la ejecución directa, debido a la manera en que SQL Server 2005 vuelve a utilizar los planes de ejecución. SQL Server 2005 tiene algoritmos eficaces para hacer coincidir las instrucciones SQL actuales con planes de ejecución generados en ejecuciones anteriores de la misma instrucción SQL. Si una aplicación ejecuta una instrucción SQL con marcadores de parámetros varias veces, SQL Server 2005 volverá a utilizar el plan de ejecución a partir de la primera ejecución, para la segunda ejecución y las siguientes (a menos que el plan quede anticuado en la caché de procedimientos). El modelo de preparación y ejecución sigue teniendo estas ventajas:

  • Buscar un plan de ejecución mediante un identificador es más eficaz que los algoritmos que se utilizan para encontrar planes de ejecución existentes que coincidan con una instrucción SQL.
  • La aplicación puede controlar cuándo se crea el plan de ejecución y cuándo se vuelve a utilizar.
  • El modelo de preparación y ejecución se puede transportar a otras bases de datos, incluidas las versiones anteriores de SQL Server.

Preparar y ejecutar en las versiones anteriores de SQL Server

SQL Server 6.5 y las versiones anteriores no admiten el modelo de preparación y ejecución directamente. Sin embargo, el controlador ODBC de SQL Server, admite el modelo de preparación y ejecución utilizando procedimientos almacenados:

  • Cuando una aplicación solicita que se prepare una instrucción SQL, el controlador ODBC ajusta la instrucción SQL en una instrucción CREATE PROCEDURE y la envía a SQL Server.
  • En una solicitud de ejecución, el controlador ODBC solicita que SQL Server ejecute el procedimiento almacenado que se genera.

En SQL Server 6.5 y SQL Server 6.0, los procedimientos almacenados generados son procedimientos almacenados temporales que se almacenan en tempdb. SQL Server 4.21a y las versiones anteriores no admiten procedimientos almacenados temporales, por lo que el controlador genera procedimientos almacenados normales que se almacenan en la base de datos actual. El proveedor Microsoft OLE DB para SQL Server y el controlador ODBC de SQL Server incluidos en SQL Server 2000 siguen este comportamiento cuando se conectan a las versiones 6.5, 6.0 y 4.21a de SQL Server.

Vea también

Conceptos

Almacenar en caché y volver a utilizar un plan de ejecución
Parámetros y reutilización de un plan de ejecución

Ayuda e información

Obtener ayuda sobre SQL Server 2005