Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Некоторые СУБД позволяют приложению указывать параметры хранимой процедуры по имени вместо позиции в вызове процедуры. Такие параметры называются именованным параметрами. ODBC поддерживает использование именованных параметров. В ODBC именованные параметры используются только в вызовах хранимых процедур и не могут использоваться в других инструкциях SQL.
Драйвер проверка значение поля SQL_DESC_UNNAMED IPD, чтобы определить, используются ли именованные параметры. Если SQL_DESC_UNNAMED не задано SQL_UNNAMED, драйвер использует имя в поле SQL_DESC_NAME IPD для идентификации параметра. Чтобы привязать параметр, приложение может вызвать SQLBindParameter , чтобы указать сведения о параметрах, а затем вызвать SQLSetDescField , чтобы задать поле SQL_DESC_NAME IPD. При использовании именованных параметров порядок параметра в вызове процедуры не важен, а номер записи параметра игнорируется.
Разница между неназванными параметрами и именованных параметров находится в связи между порядковым номером дескриптора и номером параметра в процедуре. При использовании неименованных параметров первый маркер параметра связан с первой записью дескриптора параметров, которая, в свою очередь, связана с первым параметром (в порядке создания) в вызове процедуры. При использовании именованных параметров первый маркер параметров по-прежнему связан с первой записью дескриптора параметра, но связь между номером записи дескриптора и номером параметра в процедуре больше не существует. Именованные параметры не используют сопоставление номера записи дескриптора с положением параметра процедуры; Вместо этого имя записи дескриптора сопоставляется с именем параметра процедуры.
Примечание.
Если включена автоматическая популяция IPD, драйвер заполняет дескриптор таким образом, что порядок записей дескриптора будет соответствовать порядку параметров в определении процедуры, даже если используются именованные параметры.
Если используется именованный параметр, все параметры должны быть именованы. Если какой-либо параметр не является именованным параметром, то ни один из параметров ЦС не будет называться параметрами. Если существовала смесь именованных параметров и неименованных параметров, поведение будет зависеть от драйвера.
В качестве примера именованных параметров предположим, что хранимая процедура SQL Server определена следующим образом:
CREATE PROCEDURE test @title_id int = 1, @quote char(30) AS <blah>
В этой процедуре первый параметр @title_idимеет значение по умолчанию 1. Приложение может использовать следующий код для вызова этой процедуры, чтобы указать только один динамический параметр. Этот параметр является именованным параметром с именем "@quote".
// Prepare the procedure invocation statement.
SQLPrepare(hstmt, "{call test(?)}", SQL_NTS);
// Populate record 1 of ipd.
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
30, 0, szQuote, 0, &cbValue);
// Get ipd handle and set the SQL_DESC_NAMED and SQL_DESC_UNNAMED fields
// for record #1.
SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hIpd, 0, 0);
SQLSetDescField(hIpd, 1, SQL_DESC_NAME, "@quote", SQL_NTS);
// Assuming that szQuote has been appropriately initialized,
// execute.
SQLExecute(hstmt);