Поля дескрипторов параметра, возвращающего табличное значение
Поддержка параметров, возвращающих табличное значение, включает новые поля в SQL Server дескрипторах параметра ODBC-приложения (APD) и дескрипторах параметра реализации (IPD).
Замечания
Имя |
Место |
Тип |
Описание |
---|---|---|---|
SQL_CA_SS_TYPE_NAME |
IPD |
SQLTCHAR* |
Имя серверного типа параметра, возвращающего табличное значение. Если во время вызова SQLBindParameter указано имя типа возвращающего табличное значение параметра, то следует всегда использовать значение в Юникоде, даже в тех приложениях, которые рассчитаны на работу с кодировкой ANSI. Параметр StrLen_or_IndPtr должен содержать либо строковую длину имени, умноженную на sizeof(WCHAR), либо значение SQL_NTS. Если имя типа возвращающего табличное значение параметра указано через SQLSetDescField, то его можно указать с помощью символа, который соответствует способу построения приложения. Диспетчер драйвера ODBC выполнит все необходимые преобразования данных в Юникод. |
SQL_CA_SS_TYPE_CATALOG_NAME (только для чтения) |
IPD |
SQLTCHAR* |
Каталог, в котором определен тип. |
SQL_CA_SS_TYPE_SCHEMA_NAME |
IPD |
SQLTCHAR* |
Схема, в которой определен тип. |
Приложения не должны устанавливать SQL_CA_SS_TYPE_CATALOG_NAME для параметров, возвращающих табличное значение. Иначе будет возвращена ошибка SQL_ERROR и зарегистрирована диагностическая запись с SQLSTATE = HY091 и сообщением «Недопустимый идентификатор поля дескриптора».
Если фокус параметра установлен на параметр, возвращающий табличное значение, то к параметрам, возвращающим табличное значение, применяются следующие атрибуты инструкций и поля заголовка дескриптора:
Имя |
Местоположение |
Тип |
Описание |
---|---|---|---|
SQL_ATTR_PARAMSET_SIZE (эквивалентен SQL_DESC_ARRAY_SIZE в APD.) |
APD |
SQLUINTEGER |
Размер массива для массивов буфера для параметра, возвращающего табличное значение. Это максимальное количество строк, которое может вместиться в буферы, или размер буфера в строках; параметр, возвращающий табличное значение может иметь больше или меньше строк, чем входит в буфер. По умолчанию установлено значение 1.
Примечание
Если SQL_SOPT_SS_PARAM_FOCUS установлено в значение по умолчанию 0, SQL_ATTR_PARAMSET_SIZE ссылается на инструкцию и задает число наборов параметров. Если SQL_SOPT_SS_PARAM_FOCUS установлен в порядковый номер параметра, возвращающего табличное значение, то он ссылается на параметр, возвращающий табличное значение и задает число строк для набора параметров для параметра, возвращающего табличное значение.
|
SQL_ATTR_PARAM _BIND_TYPE |
APD |
SQLINTEGER |
По умолчанию установлено значение SQL_PARAM_BIND_BY_COLUMN. Чтобы выбрать привязку на уровне строки, значение этого поля установлено в длину структуры или экземпляра буфера, который будет привязан к набору строк параметра, возвращающего табличное значение. Эта длина должна включать пробел для всех связанных столбцов и все заполнения структуры или буфера. Это гарантирует, что если адрес связанного столбца увеличивается на указанную длину, результат будет указывать на начало того же столбца в следующей строке. При использовании оператора sizeof в ANSI C, такое поведение гарантируется. |
SQL_ATTR_PARAM_BIND_OFFSET_PTR |
APD |
SQLINTEGER* |
Значение по умолчанию — указатель NULL. Если это поле отлично от NULL, драйвер отменяет ссылку на указатель, добавляет отмененное значение к каждому их отложенных полей в записи дескриптора (SQL_DESC_DATA_PTR, SQL_DESC_INDICATOR_PTR и SQL_DESC_OCTET_LENGTH_PTR), и использует новые значения указателя, чтобы получить значения данных. |
Эти поля допустимы только для параметров, возвращающих табличное значение, и игнорируются для всех остальных типов данных.
SQL_CA_SS_TYPE_NAME не является обязательным для вызовов хранимых процедур. Он должен быть указан для инструкций SQL, не являющихся вызовами процедур, чтобы разрешить серверу определять тип параметра, возвращающего табличное значение.
Если необходимо имя типа, и тип таблицы для параметра, возвращающего табличное значение, определяется в другой схеме, чем хранимая процедура, то SQL_CA_SS_TYPE_SCHEMA_NAME должен быть задан в дескрипторе параметра реализации (IPD). Иначе сервер не сможет определить тип параметра, возвращающего табличное значение. Это приведет к ошибке при вызове SQLExecute или SQLExecDirect. Ошибка будет иметь статус SQLSTATE= 07006 и сообщение «Нарушение атрибута ограниченного типа данных».
Столбцы параметра, возвращающего табличное значение, могут использовать привязки на уровне столбца или строки. По умолчанию используется привязка на уровне столбца. Установив параметр SQL_ATTR_PARAM_BIND_TYPE и SQL_ATTR_ PARAM_BIND_OFFSET_PTR, можно задать привязку на уровне строки. Это аналогично привязке на уровне строки столбцов и параметров.
Атрибуты SQL_CA_SS_TYPE_CATALOG_NAME и SQL_CA_SS_TYPE_SCHEMA_NAME могут также использоваться для получения каталога и схемы, связанных с параметрами определяемых пользователем типов данных CLR. Это альтернативы для существующих типовых атрибутов схемы каталога для этих типов.