Параметрические запросы
Именованные параметры
Именованные параметры могут использоваться в том случае, когда в SQL-операторе выполняется вызов хранимой процедуры. Именованные параметры идентифицируются в соответствии с их именами, а не по порядку их расположения (как при позиционных параметрах). Именованные параметры, так же как и позиционные параметры, связываются с переменной посредством вызова функции ODBC API SQLBindParameter, но идентифицируются посредством поля SQL_DESC_NAME IPD-дескриптора (Implementation Parameter Descriptor). Именованные параметры также могут быть связаны с переменной при вызове функции SQLSetDescField или функции SQLSetDescRec.
Далее приведен пример применения именованных параметров, используемых при вызове предварительно созданной хранимой процедуры test с двумя параметрами
(CREATE PROCEDURE test @f_id int = 1, @f2 char(30) AS )
Первый параметр процедуры имеет значение, по умолчанию равное 1, а второй параметр @f2 обязательно должен быть указан при вызове процедуры. Параметр @f2 - это динамический параметр, называемый именованным параметром.
// Компилирование вызова хранимой процедуры SQLPrepare(hstmt, "{call test(?)}", SQL_NTS); // Заполнение записи 1 для IPD-дескриптора SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 30, 0, szF2, 0, &cbValue); // Получение IPD-дескриптора и определение полей // SQL_DESC_NAMED и SQL_DESC_UNNAMED для записи #1. SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0); SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@f2", SQL_NTS); SQLSetDescField(hIpd, 1, SQL_DESC_UNNAMED, SQL_NAMED, 0); // Если переменная szF2 была корректно // инициализирована, то можно выполнять // вызов хранимой процедуры SQLExecute(hstmt);