Параметры инструкции

Параметр — это переменная в инструкции SQL. Например, предположим, что в таблице "Части" есть столбцы с именем PartID, Description и Price. Чтобы добавить часть без параметров, потребуется создать инструкцию SQL, например:

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

Хотя эта инструкция вставляет новый порядок, это не является хорошим решением для приложения записи заказа, так как значения для вставки не могут быть жестко закодированы в приложении. Альтернативой является создание инструкции SQL во время выполнения с помощью вставленных значений. Это также не является хорошим решением из-за сложности создания инструкций во время выполнения. Лучше всего заменить элементы предложения VALUES с вопросительными знаками (?) или маркерами параметров:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

Затем происходит привязка маркеров параметров к переменным приложения. Чтобы добавить новую строку, приложению нужно задать только значения переменных и выполнить инструкцию. После этого драйвер получает текущие значения переменных и передает их в источник данных. Если оператор будет выполняться несколько раз, приложение может сделать процесс еще более эффективным, подготовив инструкцию.

Только что показанная инструкция может быть жестко закодирована в приложении записи заказа, чтобы вставить новую строку. Однако маркеры параметров не ограничиваются вертикальными приложениями. Для любого приложения они упрощают создание инструкций SQL во время выполнения, избегая преобразования в текст и из нее. Например, идентификатор части, который отображается, скорее всего, хранится в приложении как целое число. Если инструкция SQL создается без маркеров параметров, приложение должно преобразовать идентификатор части в текст, а источник данных должен преобразовать его обратно в целое число. С помощью маркера параметра приложение может отправить идентификатор части драйверу в виде целого числа, которое обычно может отправлять его в источник данных в виде целого числа. При этом сохраняется два преобразования. Для длинных значений данных это очень важно, так как текстовые формы таких значений часто превышают допустимую длину инструкции SQL.

Параметры допустимы только в определенных местах в инструкциях SQL. Например, они не допускаются в списке выбора (список столбцов, возвращаемых инструкцией SELECT ), и не допускаются как оба операнда двоичного оператора, например знак равенства (=), так как невозможно определить тип параметра. Как правило, параметры допустимы только в операторах языка обработки данных (DML), а не в инструкциях языка определения данных (DDL). Дополнительные сведения см. в разделе "Маркеры параметров" в приложении C: грамматика SQL.

Когда инструкция SQL вызывает процедуру, можно использовать именованные параметры. Именованные параметры определяются их именами, а не по их позиции в инструкции SQL. Они могут быть привязаны вызовом SQLBindParameter, но параметр определяется полем SQL_DESC_NAME IPD (дескриптор параметра реализации), а не аргументом ParameterNumber SQLBindParameter. Они также могут быть привязаны путем вызова SQLSetDescField или SQLSetDescRec. Дополнительные сведения о именованных параметрах см. в разделе "Параметры привязки по имени" (именованные параметры) далее в этом разделе. Дополнительные сведения о дескрипторах см. в разделе "Дескрипторы".

Этот раздел содержит следующие подразделы.