Определяемые пользователем типы данных больших значений CLR (ODBC)
В этом разделе обсуждаются изменения ODBC в собственном клиенте SQL Server для поддержки определяемых пользователем типов данных CLR.
Образец, демонстрирующий поддержку ODBC для больших, определяемых пользователем типов данных среды CLR, приведен в разделе Поддержка больших, определяемых пользователем типов.
Дополнительные сведения о поддержке определяемых пользователем типов данных больших значений CLR в собственном клиенте SQL Server см. в разделе Большие определяемые пользователем типы данных 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 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 (метаданные каталога)» ранее в этом разделе.