Поделиться через


Определяемые пользователем типы данных больших значений 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 (метаданные каталога)» ранее в этом разделе.

См. также

Основные понятия

Большие определяемые пользователем типы данных CLR