Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El proveedor OLE DB de SQL Server Native Client admite la preparación de comandos para optimizar varias ejecuciones de un solo comando; Sin embargo, la preparación del comando genera sobrecarga y un consumidor no necesita preparar un comando para ejecutarlo más de una vez. En general, se debe preparar un comando si se ejecutará más de tres veces.
Por motivos de rendimiento, la preparación del comando se aplaza hasta que se ejecuta el comando. Este es el comportamiento predeterminado. Los errores del comando que se está preparando no se conocen hasta que se ejecuta el comando o se realiza una operación de metapropiedad. Establecer la propiedad de SQL Server SSPROP_DEFERPREPARE en FALSE puede desactivar este comportamiento predeterminado.
En SQL Server, cuando un comando se ejecuta directamente (sin prepararlo primero), se crea y almacena en caché un plan de ejecución. Si la instrucción SQL se ejecuta de nuevo, SQL Server tiene un algoritmo eficaz para que coincida con la nueva instrucción con el plan de ejecución existente en la memoria caché y reutiliza el plan de ejecución de esa instrucción.
Para los comandos preparados, SQL Server proporciona compatibilidad nativa para preparar y ejecutar instrucciones de comando. Al preparar una instrucción, SQL Server crea un plan de ejecución, lo almacena en caché y devuelve un identificador para este plan de ejecución al proveedor. A continuación, el proveedor usa este identificador para ejecutar la instrucción repetidamente. No se crea ningún procedimiento almacenado. Dado que el identificador identifica directamente el plan de ejecución de una instrucción SQL en lugar de hacer coincidir la instrucción con el plan de ejecución en la memoria caché (como es el caso de la ejecución directa), es más eficaz preparar una instrucción que ejecutarla directamente, si sabe que la instrucción se ejecutará más de unas pocas veces.
En SQL Server 2005, las instrucciones preparadas no se pueden usar para crear objetos temporales y no pueden hacer referencia a procedimientos almacenados del sistema que crean objetos temporales, como tablas temporales. Estos procedimientos se deben ejecutar directamente.
Algunos comandos nunca deben estar preparados. Por ejemplo, los comandos que especifican la ejecución del procedimiento almacenado o que incluyen texto no válido para la creación de procedimientos almacenados de SQL Server no deben estar preparados.
Si se crea un procedimiento almacenado temporal, el proveedor OLE DB de SQL Server Native Client ejecuta el procedimiento almacenado temporal, devolviendo resultados como si se ejecutara la propia instrucción.
La creación de procedimientos almacenados temporales se controla mediante el proveedor OLE DB de SQL Server Native Client -specific propiedad de inicialización SSPROP_INIT_USEPROCFORPREP. Si el valor de la propiedad es SSPROPVAL_USEPROCFORPREP_ON o SSPROPVAL_USEPROCFORPREP_ON_DROP, el proveedor OLE DB de SQL Server Native Client intenta crear un procedimiento almacenado cuando se prepara un comando. La creación de procedimientos almacenados se realiza correctamente si el usuario de la aplicación tiene suficientes permisos de SQL Server.
Para los consumidores que se desconectan con poca frecuencia, la creación de procedimientos almacenados temporales puede requerir recursos significativos de tempdb, la base de datos del sistema de SQL Server en la que se crean objetos temporales. Cuando el valor de SSPROP_INIT_USEPROCFORPREP está SSPROPVAL_USEPROCFORPREP_ ON, los procedimientos almacenados temporales creados por el proveedor OLE DB de SQL Server Native Client solo se quitan cuando la sesión que creó el comando pierde su conexión a la instancia de SQL Server. Si esa conexión es la conexión predeterminada creada en la inicialización del origen de datos, el procedimiento almacenado temporal solo se quita cuando el origen de datos deja de inicializarse.
Cuando se SSPROPVAL_USEPROCFORPREP_ON_DROP el valor de SSPROP_INIT_USEPROCFORPREP, los procedimientos almacenados temporales del proveedor OLE DB de SQL Server Native Client se quitan cuando se produce una de las siguientes acciones:
El consumidor usa ICommandText::SetCommandText para indicar un nuevo comando.
El consumidor usa ICommandPrepare::Unprepare para indicar que ya no requiere el texto del comando.
El consumidor libera todas las referencias al objeto de comando mediante el procedimiento almacenado temporal.
Un objeto de comando tiene como máximo un procedimiento almacenado temporal en tempdb. Cualquier procedimiento almacenado temporal existente representa el texto del comando actual de un objeto de comando específico.