Поля дескрипторов возвращающего табличное значение параметра
Поддержка возвращающих табличное значение параметров включает новые поля в SQL Server-дескрипторах параметра ODBC-приложения и дескрипторах параметра реализации.
Замечания
Название |
Местоположение |
Тип |
Описание |
---|---|---|---|
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 |
SQLUINTEGER |
Размер массива для массивов буфера для возвращающего табличное значение параметра. Это максимальное количество строк, которое может быть размещено в буферах, или размер буферов в строках. Возвращающий табличное значение параметр может иметь больше или меньше строк, чем помещается в буфер. По умолчанию установлено значение 1.
|
||
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 должно быть задано в дескрипторе параметра реализации. Иначе сервер не сможет определить тип возвращающего табличное значение параметра. Это приведет к ошибке при вызове функции 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. Это альтернатива для существующих атрибутов схемы каталога, зависящих от типа, для этих типов.