Определяемые пользователем типы данных больших значений CLR (ODBC)
В этом подразделе обсуждаются изменения ODBC в собственном клиенте SQL Server для поддержки определяемых пользователем типов данных больших значений CLR.
Дополнительные сведения о поддержке определяемых пользователем типов данных больших значений CLR в собственном клиенте см. в разделе Большие определяемые пользователем типы данных CLR.
Формат данных
Собственный клиент SQL Server использует SQL_SS_LENGTH_UNLIMITED для обозначения того, что размер столбца больше чем 8000 байт для типов больших объектов. Начиная с SQL Server 2008, при размере столбца больше 8000 байт, для определяемых пользователем типов данных больших значений CLR используется одинаковое значение.
Значения определяемых пользователем типов представляются в виде массивов байт. Поддерживается преобразование данных в шестнадцатеричные строки и из шестнадцатеричных строк. Литеральные значения представляются в виде шестнадцатеричных строк с префиксом «0x».
В следующей таблице показано сопоставление типов данных в параметрах и результирующих наборах:
Тип данных SQL Server |
Тип данных SQL |
Значение |
---|---|---|
Определяемый пользователем тип среды CLR |
SQL_SS_UDT |
-151 (sqlncli.h) |
В следующей таблице обсуждается соответствующая структура и тип ODBC C. Фактически, определяемый пользователем тип данных CLR является типом varbinary с дополнительными метаданными.
Тип данных SQL |
Организация памяти |
Тип данных C |
Значение (sqlext.h) |
---|---|---|---|
SQL_SS_UDT |
SQLCHAR *(тип unsigned char *) |
SQL_C_BINARY |
SQL_BINARY (-2) |
Поля дескрипторов для параметров
Сведения, возвращаемые в поля IPD следующим образом:
Поле дескриптора |
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT (длина более 8 000 байт) |
---|---|---|
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
Имя каталога, содержащего определяемый пользователем тип. |
Имя каталога, содержащего определяемый пользователем тип. |
SQL_CA_SS_UDT_SCHEMA_NAME |
Имя схемы, содержащей определяемый пользователем тип. |
Имя схемы, содержащей определяемый пользователем тип. |
SQL_CA_SS_UDT_TYPE_NAME |
Имя определяемого пользователем типа. |
Имя определяемого пользователем типа. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
Полное имя определяемого пользователем типа. |
Полное имя определяемого пользователем типа. |
Для параметров определяемого пользователем типа SQL_CA_SS_UDT_TYPE_NAME всегда следует устанавливать через SQLSetDescField. SQL_CA_SS_UDT_CATALOG_NAME и SQL_CA_SS_UDT_SCHEMA_NAME необязательны.
Если определяемый пользователем тип и таблица определяются в одной базе данных, но с разными схемами, необходимо установить SQL_CA_SS_UDT_SCHEMA_NAME.
Если определяемый пользователем тип и таблица определяются в разных базах данных, необходимо установить SQL_CA_SS_UDT_CATALOG_NAME и SQL_CA_SS_UDT_SCHEMA_NAME.
Если в установках для SQL_CA_SS_UDT_TYPE_NAME, SQL_CA_SS_UDT_CATALOG_NAME или SQL_CA_SS_UDT_SCHEMA_NAME существуют какие-либо ошибки или пропуски, то создается запись диагностики с кодом SQLSTATE HY000 и специфичный для сервера текст сообщения.
Поля дескрипторов для результатов
Сведения, возвращаемые в поля IRD следующим образом:
Поле дескриптора |
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT (длина более 8 000 байт) |
---|---|---|
SQL_DESC_AUTO_UNIQUE_VALUE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CASE_SENSITIVE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_CONCISE_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_DATETIME_INTERVAL_CODE |
0 |
0 |
SQL_DESC_DATETIME_INTERVAL_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_DISPLAY_SIZE |
2n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_FIXED_PREC_SCALE |
SQL_FALSE |
SQL_FALSE |
SQL_DESC_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_LITERAL_PREFIX |
"0x" |
"0x" |
SQL_DESC_LITERAL_SUFFIX |
"" |
"" |
SQL_DESC_LOCAL_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_PRECISION |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_DESC_SCALE |
0 |
0 |
SQL_DESC_SEARCHABLE |
SQL_PRED_NONE |
SQL_PRED_NONE |
SQL_DESC_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DESC_TYPE_NAME |
"udt" |
"udt" |
SQL_DESC_UNSIGNED |
SQL_TRUE |
SQL_TRUE |
SQL_CA_SS_UDT_CATALOG_NAME |
Имя каталога, содержащего определяемый пользователем тип. |
Имя каталога, содержащего определяемый пользователем тип. |
SQL_CA_SS_UDT_SCHEMA_NAME |
Имя схемы, содержащей определяемый пользователем тип. |
Имя схемы, содержащей определяемый пользователем тип. |
SQL_CA_SS_UDT_TYPE_NAME |
Имя определяемого пользователем типа. |
Имя определяемого пользователем типа. |
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME |
Полное имя определяемого пользователем типа. |
Полное имя определяемого пользователем типа. |
Метаданные столбца, возвращаемые функциями SQLColumns и SQLProcedureColumns (метаданные каталога)
Для определяемых пользователем типов возвращаются следующие значения столбца:
Имя столбца |
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT (длина более 8 000 байт) |
---|---|---|
DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
TYPE_NAME |
Имя определяемого пользователем типа. |
Имя определяемого пользователем типа. |
COLUMN_SIZE |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
BUFFER_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
DECIMAL_DIGITS |
NULL |
NULL |
SQL_DATA_TYPE |
SQL_SS_UDT |
SQL_SS_UDT |
SQL_DATETIME_SUB |
NULL |
NULL |
CHAR_OCTET_LENGTH |
n |
SQL_SS_LENGTH_UNLIMITED (0) |
SS_UDT_CATALOG_NAME |
Имя каталога, содержащего определяемый пользователем тип. |
Имя каталога, содержащего определяемый пользователем тип. |
SS_UDT_SCHEMA_NAME |
Имя схемы, содержащей определяемый пользователем тип. |
Имя схемы, содержащей определяемый пользователем тип. |
SS_UDT_ASSEMBLY_TYPE_NAME |
Полное имя определяемого пользователем типа. |
Полное имя определяемого пользователем типа. |
Три последних столбца являются специфичными для драйвера. Они добавляются после любых определенных для ODBC столбцов, но перед любыми существующими специфичными для драйвера столбцами результирующего набора SQLColumns или SQLProcedureColumns.
Для отдельных определяемых пользователем типов или универсального типа «udt» посредством SQLGetTypeInfo строки не возвращаются.
Привязки и преобразования
Поддерживаются следующие преобразования типов данных SQL в C:
Прямое и обратное преобразование: |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
Поддерживается * |
SQL_C_BINARY |
Поддерживается |
SQL_C_CHAR |
Поддерживается * |
* Двоичные данные преобразуются в шестнадцатеричную строку.
Поддерживаются следующие преобразования типов данных C в SQL:
Прямое и обратное преобразование: |
SQL_SS_UDT |
---|---|
SQL_C_WCHAR |
Поддерживается * |
SQL_C_BINARY |
Поддерживается |
SQL_C_CHAR |
Поддерживается * |
* Шестнадцатеричная строка преобразуется в двоичные данные.
Поддержка SQL_VARIANT для определяемых пользователем типов
Определяемые пользователем типы не поддерживаются в столбцах SQL_VARIANT.
Поддержка программы bcp для определяемых пользователем типов
Значения определяемых пользователем типов могут импортироваться или экспортироваться только в виде символьных или двоичных значений.
Поведение клиента нижнего уровня для определяемых пользователем типов
Определяемые пользователем типы проходят сопоставление типов с клиентами низкого уровня, как показано далее.
Версия сервера |
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT (длина более 8 000 байт) |
---|---|---|
SQL Server 2000 |
varbinary |
image |
SQL Server 2005 |
UDT |
varbinary(max) |
SQL Server 2008 |
UDT |
UDT |
Функции ODBC, поддерживающие определяемые пользователем типы больших данных CLR
В данном разделе обсуждаются изменения в функциях ODBC собственного клиента SQL Server, касающиеся поддержки определяемых пользователем типов больших данных CLR.
SQLBindCol
Значения результирующих столбцов определяемых пользователем типов преобразуются из типов данных SQL Server в типы данных языка C, как описано в подразделе «Привязки и преобразования» ранее в этом разделе.
SQLBindParameter
Для определяемых пользователем типов требуются следующие значения.
Тип данных SQL |
Parametertype |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (длина более 8 000 байт) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLColAttribute
Значения, возвращаемые для определяемых пользователем типов, описаны в подразделе «Поля дескрипторов для результатов» ранее в этом разделе.
SQLColumns
Значения, возвращаемые для определяемых пользователем типов, описаны в подразделе «Метаданные столбца, возвращаемые функциями SQLColumns и SQLProcedureColumns (метаданные каталога)» ранее в этом разделе.
SQLDescribeCol
Для определяемых пользователем типов возвращаются следующие значения.
Тип данных SQL |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (длина более 8 000 байт) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLDescribeParam
Для определяемых пользователем типов возвращаются следующие значения.
Тип данных SQL |
DataTypePtr |
ColumnSizePtr |
DecimalDigitsPtr |
---|---|---|---|
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT |
n |
0 |
SQL_SS_UDT (длина более 8 000 байт) |
SQL_SS_UDT |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLFetch
Значения результирующих столбцов определяемых пользователем типов преобразуются из типов данных SQL Server в типы данных языка C, как описано в подразделе «Привязки и преобразования» ранее в этом разделе.
SQLFetchScroll
Значения результирующих столбцов определяемых пользователем типов преобразуются из типов данных SQL Server в типы данных языка C, как описано в подразделе «Привязки и преобразования» ранее в этом разделе.
SQLGetData
Значения результирующих столбцов определяемых пользователем типов преобразуются из типов данных SQL Server в типы данных языка C, как описано в подразделе «Привязки и преобразования» ранее в этом разделе.
SQLGetDescField
Поля дескрипторов, доступные с новыми типами, описаны в подразделах «Поля дескрипторов для параметров» и «Поля дескрипторов для результатов» ранее в этом разделе.
SQLGetDescRec
Для определяемых пользователем типов возвращаются следующие значения.
Тип данных SQL |
Тип |
Подтип |
Длина |
Точность |
Масштаб |
---|---|---|---|---|---|
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (длина более 8 000 байт) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLGetTypeInfo
Значения, возвращаемые для определяемых пользователем типов, описаны в подразделе «Метаданные, возвращаемые функциями SQLColumns и SQLProcedureColumns (метаданные каталога)» ранее в этом разделе.
SQLProcedureColumns
Значения, возвращаемые для определяемых пользователем типов, описаны в подразделе «Метаданные, возвращаемые функциями SQLColumns и SQLProcedureColumns (метаданные каталога)» ранее в этом разделе.
SQLPutData
Значения параметров определяемых пользователем типов преобразуются из типов данных языка C в типы данных SQL, как описано в подразделе «Привязки и преобразования» ранее в этом разделе.
SQLSetDescField
Поля дескрипторов, доступные с новыми типами, описаны в подразделах «Поля дескрипторов для параметров» и «Поля дескрипторов для результатов» ранее в этом разделе.
SQLSetDescRec
Для определяемых пользователем типов разрешены следующие значения.
Тип данных SQL |
Тип |
Подтип |
Длина |
Точность |
Масштаб |
---|---|---|---|---|---|
SQL_SS_UDT (длина не более 8 000 байт) |
SQL_SS_UDT |
0 |
n |
n |
0 |
SQL_SS_UDT (длина более 8 000 байт) |
SQL_SS_UDT |
0 |
SQL_SS_LENGTH_UNLIMITED (0) |
SQL_SS_LENGTH_UNLIMITED (0) |
0 |
SQLSpecialColumns
Значения, возвращаемые для столбцов DATA_TYPE, TYPE_NAME, COLUMN_SIZE, BUFFER_LENGTH и DECIMAL_DIGTS определяемых пользователем типов, описаны в подразделе «Метаданные, возвращаемые функциями SQLColumns и SQLProcedureColumns (метаданные каталога)» ранее в этом разделе.