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


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