Поля дескрипторов возвращающего табличное значение параметра
Поддержка возвращаемых табличным значением параметров включает новые SQL Server поля в дескрипторах параметров приложения ODBC (APD) и дескрипторах параметров реализации (IPD).
Комментарии
Имя | Расположение | Тип | Описание |
---|---|---|---|
SQL_CA_SS_TYPE_NAME | IPD | SQLTCHAR* | Имя серверного типа возвращающего табличное значение параметра. Если имя типа возвращающего табличное значение параметра указывается при вызове SQLBindParameter, оно всегда должно указываться в виде значения Юникода, даже в приложениях, созданных как приложения ANSI. Значение, используемое для параметра StrLen_or_IndPtr , должно быть либо SQL_NTS, либо длина строки имени, умноженная на sizeof(WCHAR). Если имя типа возвращающего табличное значение параметра указывается с помощью 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_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 должно быть задано в дескрипторе параметра реализации. Иначе сервер не сможет определить тип возвращающего табличное значение параметра. Это приведет к ошибке при вызове 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. Это альтернатива для существующих атрибутов схемы каталога, зависящих от типа, для этих типов.