Compartir a través de


SQLPrepare

El controlador ODBC de SQL Server Native Client crea un procedimiento almacenado temporal a partir de instrucciones SQL preparadas. Los procedimientos almacenados son una manera eficaz de ejecutar varias veces una instrucción, pero crear un procedimiento almacenado es más costoso que ejecutar una instrucción simple. Por regla general, considere la posibilidad de utilizar SQLPrepare y SQLExecute si la aplicación va a ejecutar una instrucción SQL más de tres veces.

[!NOTA]

SQL Server admite el modelo de preparación/ejecución de ODBC. Esta descripción del comportamiento de SQLPrepare/SQLExecute sólo se aplica a las versiones de SQL Server anteriores a la versión 7.0.

Un procedimiento almacenado temporal creado por SQLPrepare se denomina **#odbc#**identificadorDeUsuario, donde identificadorDeUsuario es el nombre del usuario de un máximo de seis caracteres seguido de ocho dígitos que identifican el procedimiento.

SQLPrepare crea el procedimiento almacenado temporal si se han enlazado todos los valores de parámetro o si la instrucción SQL no contiene parámetros. SQLExecute crea el procedimiento si no se enlazaron todos los parámetros cuando se llamó a SQLPrepare.

SQLPrepare puede crear procedimientos almacenados de manera más eficaz que SQLExecute y es recomendable utilizar SQLBindParameter para enlazar las variables de parámetro antes de llamar a SQLPrepare.

Si la instrucción CREATE PROCEDURE utilizada para generar un procedimiento almacenado temporal devuelve un error, SQLPrepare o SQLExecute envía la instrucción a SQL Server con la opción SET NOEXEC o SET PARSEONLY activada (según el tipo de instrucción). SQL Server comprueba la sintaxis de la instrucción y devuelve los errores.

SQLExecute puede devolver todas las instrucciones ODBC SQLSTATE y todos los errores de SQL Server que puede devolver SQLPrepare.

El controlador ODBC de SQL Server Native Client crea un nuevo procedimiento almacenado temporal si los valores de InputOutputType, ParameterType, DecimalDigits o ColumnSizese modifican en las llamadas a SQLBindParameter en una instrucción preparada. No se creará un nuevo procedimiento almacenado temporal cuando los parámetros enlazados apunten a nuevos búferes en la memoria del cliente, cuando se cambie la longitud de memoria del cliente o cuando se modifique el puntero al valor de longitud o indicador del parámetro.

Si una conexión no puede crear un procedimiento almacenado por algún motivo (como la falta de permisos), el controlador ODBC de SQL Server Native Client no utiliza un procedimiento almacenado, sino que envía la instrucción SQL cada vez que se llama a SQLExecute.

De forma predeterminada, el controlador ODBC de SQL Server Native Client borra los procedimientos almacenados temporales cuando se interrumpe la conexión (se llama a SQLDisconnect para la conexión). Esto puede provocar algún problema si se espera que la conexión permanezca abierta indefinidamente. El comportamiento predeterminado se puede cambiar utilizando la opción de conexión específica del controlador SQL_USE_PROCEDURE_FOR_PREPARE.

[!NOTA]

Si se ha ejecutado SET NOCOUNT ON, varias instrucciones incrustadas en un procedimiento almacenado no crean varios conjuntos de resultados como cabría esperar. El controlador omite los recuentos de filas generados por instrucciones SQL dentro de un procedimiento almacenado.