Определяемые пользователем типы данных больших значений CLR (ODBC)
Применимо: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
azure Synapse Analytics Analytics
Platform System (PDW)
Внимание
SQL Server Native Client (SNAC) не поставляется с:
- SQL Server 2022 (16.x) и более поздних версий
- SQL Server Management Studio 19 и более поздних версий
Собственный клиент SQL Server (SQLNCLI или SQLNCLI11) и устаревший поставщик Microsoft OLE DB для SQL Server (SQLOLEDB) не рекомендуется для разработки новых приложений.
Для новых проектов используйте один из следующих драйверов:
Сведения о 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 | Тип | Подтип | Length | Точность | Масштабировать |
---|---|---|---|---|---|
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 | Тип | Подтип | Length | Точность | Масштабировать |
---|---|---|---|---|---|
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 (метаданные каталога)» ранее в этом разделе.