Определяемые пользователем типы данных больших значений CLR (ODBC)

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Внимание

Собственный клиент SQL Server (часто сокращенный SNAC) был удален из SQL Server 2022 (16.x) и SQL Server Management Studio 19 (SSMS). Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений. Перейдите на новый драйвер Microsoft OLE DB (MSOLEDBSQL) для SQL Server или последний драйвер Microsoft ODBC для SQL Server . Сведения о SQLNCLI, которые поставляется в качестве компонента ядра СУБД SQL Server (версии 2012–2019), см. в этом исключении жизненного цикла поддержки.

В этом разделе обсуждаются изменения ODBC в собственном клиенте SQL Server для поддержки определяемых пользователем типов данных CLR.

Пример поддержки ODBC для больших определяемых пользователем объектов CLR см. в разделе "Поддержка крупных определяемых пользователем пользователей".

Дополнительные сведения о поддержке больших определяемых пользователем пользователей среды CLR в sql Server Native Client см. в разделе "Крупные определяемые пользователем типы СРЕДЫ CLR".

Формат данных

Собственный клиент SQL Server использует значение SQL_SS_LENGTH_UNLIMITED для обозначения того, что размер столбца больше чем 8000 байт для типов больших объектов. Начиная с SQL Server 2008, при размере столбца больше 8000 байт для определяемых пользователем типов данных больших значений CLR используется такое же значение.

Значения определяемых пользователем типов представляются в виде массивов байт. Поддерживается преобразование данных в шестнадцатеричные строки и из шестнадцатеричных строк. Литеральные значения представляются в виде шестнадцатеричных строк с префиксом «0x».

В следующей таблице показано сопоставление типов данных в параметрах и результирующих наборах.

Тип данных SQL Server Тип данных SQL значение
CLR UDT SQL_SS_UDT -151 (sqlncli.h)

В следующей таблице обсуждается соответствующая структура и тип ODBC C. По сути, UDT 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.

Строки не возвращаются SQLGetTypeInfo для отдельных определяемых пользователем типов или для универсального типа "udt".

Привязки и преобразования

Поддерживаются следующие преобразования типов данных 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

Значения столбцов результатов UDT преобразуются из типов данных SQL в C, как описано в разделе "Привязки и преобразования" выше в этом разделе.

SQLBindParameter

Для определяемых пользователем типов необходимы следующие значения.

Тип данных SQL Тип параметра 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

Значения столбцов результатов UDT преобразуются из типов данных SQL в C, как описано в разделе "Привязки и преобразования" выше в этом разделе.

SQLFetchScroll

Значения столбцов результатов UDT преобразуются из типов данных SQL в C, как описано в разделе "Привязки и преобразования" выше в этом разделе.

SQLGetData

Значения столбцов результатов UDT преобразуются из типов данных SQL в 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

Значения параметров UDT преобразуются из 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