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

Применимо к: SQL Server Azure SQL DatabaseУправляемый экземпляр SQL AzureAzure Synapse AnalyticsAnalytics 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 Native Client отправляет на сервер символьные или двоичные строковые параметры, он заполняет значения длиной, указанной в параметре SQLBindParameterColumnSize. Если приложение ODBC 2.x указывает 0 для ColumnSize, драйвер заполняет значение параметра точностью типа данных. Точность равна 8000 при подключении к серверам SQL Server, 255 — при подключении к предыдущим версиям SQL Server. ColumnSize имеет значение в байтах для столбцов variant.

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

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

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

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

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

См. также:

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