SQLPrepare

Драйвер ODBC для собственного клиента SQL Server создает временную хранимую процедуру из подготовленных инструкций SQL. Хранимые процедуры - это эффективный путь многократного выполнения инструкций, но создание хранимой процедуры более затратно, чем выполнение простой инструкции. Лучше взять за правило учитывать использования функций SQLPrepare и SQLExecute, если приложение будет выполнять инструкцию SQL более трех раз.

Примечание

SQL Server поддерживает модель подготовки и выполнения ODBC. Обсуждаемое поведение функций SQLPrepare/SQLExecute применимо только к версиям SQL Server раньше, чем 7.0.

Временная хранимая процедура, созданная функцией SQLPrepare, называется**#odbc#**идентификатор пользователя, где идентификатор пользователя состоит максимум из шести символов имени пользователя, объединенного с максимум восемью цифрами, определяющими процедуру.

Функция SQLPrepare создает временную хранимую процедуру, если все значения параметра были связаны или если инструкция SQL не содержит параметров. Функция SQLExecute создает процедуру, если все параметры не были связаны, когда была вызвана функция SQLPrepare.

Функция SQLPrepare может создавать хранимые процедуры более эффективно, чем функция SQLExecute, и рекомендуется использовать SQLBindParameter, чтобы связывать переменные параметра перед вызовом функции SQLPrepare.

Если инструкция CREATE PROCEDURE, используемая для создания временной хранимой процедуры, возвращает ошибку, функция SQLPrepare или функция SQLExecute отправляет инструкцию SQL Server с выставленным параметром SET NOEXEC или SET PARSEONLY (в зависимости от типа инструкции). SQL Server проверяет синтаксис инструкции и возвращает ошибки.

Функция SQLExecute может возвратить любую ODBC SQLSTATE и SQL Server ошибку, которую может возвратить функция SQLPrepare.

Драйвер ODBC для собственного клиента SQL Server создает новую временную хранимую процедуру, если значения InputOutputType, ParameterType, ColumnSize или DecimalDigits изменены при вызове функции SQLBindParameter на подготовленной инструкции. Новая временная хранимая процедура не будет создана, если связанные параметры указываются в новых буферах в клиентской памяти, если объем клиентской памяти изменяется или если изменяются указатель на длину или индикатор значения параметра.

Если соединение не может создать хранимую процедуру по какой-либо причине (как например, отсутствие разрешения), драйвер ODBC для собственного клиента SQL Server не использует хранимую процедуру, но вместо этого отправляет инструкцию SQL каждый раз при вызове функции SQLExecute.

По умолчанию драйвер ODBC для собственного клиента SQL Server удаляет временные хранимые процедуры, когда соединение прерывается (для соединения вызывается функция SQLDisconnect). Это может привести к проблемам, если ожидается, что соединение будет оставаться открытым бесконечно. Поведение по умолчанию можно изменить при помощи параметра соединения SQL_USE_PROCEDURE_FOR_PREPARE, зависящего от драйвера.

Примечание

Если выполняется инструкция SET NOCOUNT ON, несколько инструкций, внедренных в хранимую процедуру, не создают несколько результирующих наборов, как должны. Подсчеты строк, созданные инструкциями SQL внутри хранимых процедур, не учитываются драйвером.

См. также

Основные понятия

Подробности реализации API-интерфейса ODBC

Другие ресурсы

Функция SQLPrepare