Поделиться через


Использование параметров инструкции — привязка параметров

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Каждый маркер параметра в инструкции SQL должен быть связан или привязан к переменной в приложении перед выполнением инструкции. Это делается путем вызова функции SQLBindParameter . SQLBindParameter описывает переменную программы (адрес, тип данных C и т. д.) драйверу. Она также определяет маркер параметра, указывая его порядковое значение, а затем описывая характеристики представляемого им объекта SQL (тип данных SQL, точность и т. д.).

Маркеры параметров могут быть привязаны или повторно привязаны в любое время перед выполнением инструкции. Привязка параметра действует до тех пор, пока не происходит одно из следующих событий.

  • Вызов SQLFreeStmt с параметром Option , заданным для SQL_RESET_PARAMS освобождает все параметры, привязанные к дескриптору инструкции.

  • Вызов SQLBindParameter с параметром ParameterNumber , заданным в порядковый номер маркера привязанного параметра, автоматически освобождает предыдущую привязку.

Приложение также может привязать параметры к массивам программных переменных для обработки инструкции SQL в пакетах. Существует два типа привязки массивов.

  • Привязка на уровне столбца выполняется, если каждый отдельный параметр привязан к собственному массиву переменных.

    Привязка со столбцами указывается путем вызова SQLSetStmtAttr с набором атрибутов для SQL_ATTR_PARAM_BIND_TYPE и ValuePtr, равных SQL_PARAM_BIND_BY_COLUMN.

  • Привязка на уровне строки выполняется, если все параметры в инструкции SQL привязаны в виде блока к массиву структур, которые содержат отдельные переменные для параметров.

    Привязка по строкам определяется путем вызова SQLSetStmtAttr с набором атрибутов для SQL_ATTR_PARAM_BIND_TYPE и ValuePtr, заданных для размера структуры, включающей переменные программы.

Когда драйвер ODBC собственного клиента SQL Server отправляет на сервер символ или двоичные строковые параметры, он заполняет значения длиной, указанной в параметре ColumnSize SQLBindParameter. Если приложение ODBC 2.x указывает значение 0 для ColumnSize, драйвер заполняет значение параметра точностью типа данных. Точность составляет 8000 при подключении к серверам SQL Server, 255 при подключении к более ранним версиям SQL Server. ColumnSize содержит байты для вариантных столбцов.

SQL Server поддерживает определение имен для параметров хранимой процедуры. ODBC 3.5 также представила поддержку именованных параметров, используемых при вызове хранимых процедур SQL Server. Эта поддержка может использоваться для следующих действий.

  • Вызов хранимой процедуры и предоставление значений для подмножества параметров, заданных для хранимой процедуры.

  • Указание параметров в приложении не в той последовательности, в какой они были заданы при создании хранимой процедуры.

Именованные параметры поддерживаются только при использовании инструкции Transact-SQL EXECUTE или escape-последовательности ODBC CALL для выполнения хранимой процедуры.

Если SQL_DESC_NAME задан для параметра хранимой процедуры, все параметры хранимой процедуры в запросе также должны задавать SQL_DESC_NAME. Если литералы используются в вызовах хранимой процедуры, где параметры имеют SQL_DESC_NAME задать, литералы должны использовать формат "значение имени=", где имя — имя параметра хранимой процедуры (например, . @p1) Дополнительные сведения см. в разделе "Параметры привязки по имени" (именованные параметры).

См. также

Использование параметров инструкции