大きな CLR ユーザー定義型 (ODBC)

このトピックでは、大きな共通言語ランタイム (CLR) ユーザー定義型 (UDT) をサポートするための、SQL Server Native Client の ODBC に対する変更について説明します。

SQL Server Native Client における大きな CLR UDT のサポートの詳細については、「大きな CLR ユーザー定義型」を参照してください。

データ形式

SQL Server Native Client では、大きなオブジェクト (LOB) の型について、列のサイズが 8,000 バイトを超えていることを示す場合に、SQL_SS_LENGTH_UNLIMITED が使用されます。SQL Server 2008 以降では、サイズが 8,000 バイトを超えている CLR UDT にも同じ値が使用されるようになりました。

UDT 値はバイト配列として表されます。16 進文字列との間の変換がサポートされています。リテラル値は、"0x" で始まる 16 進文字列として表されます。

次の表に、パラメータおよび結果セットでのデータ型のマッピングを示します。

SQL Server データ型

SQL データ型

CLR UDT

SQL_SS_UDT

-151 (sqlncli.h)

次の表に、対応する構造体と ODBC C 型を示します。CLR UDT は、基本的には 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

UDT を含むカタログの名前

UDT を含むカタログの名前

SQL_CA_SS_UDT_SCHEMA_NAME

UDT を含むスキーマの名前

UDT を含むスキーマの名前

SQL_CA_SS_UDT_TYPE_NAME

UDT の名前

UDT の名前

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

UDT の完全修飾名

UDT の完全修飾名

UDT パラメータには、SQLSetDescField によって必ず SQL_CA_SS_UDT_TYPE_NAME を設定する必要があります。SQL_CA_SS_UDT_CATALOG_NAME と SQL_CA_SS_UDT_SCHEMA_NAME は省略可能です。

UDT が、テーブルとは異なるスキーマで同じデータベースに定義されている場合は、SQL_CA_SS_UDT_SCHEMA_NAME を設定する必要があります。

UDT がテーブルとは別のデータベースに定義されている場合は、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

UDT を含むカタログの名前

UDT を含むカタログの名前

SQL_CA_SS_UDT_SCHEMA_NAME

UDT を含むスキーマの名前

UDT を含むスキーマの名前

SQL_CA_SS_UDT_TYPE_NAME

UDT の名前

UDT の名前

SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME

UDT の完全修飾名

UDT の完全修飾名

SQLColumns および SQLProcedureColumns から返される列のメタデータ (カタログ メタデータ)

UDT に対して次の列値が返されます。

列名

SQL_SS_UDT

(8,000 バイト以下の長さ)

SQL_SS_UDT

(8,000 バイトを超える長さ)

DATA_TYPE

SQL_SS_UDT

SQL_SS_UDT

TYPE_NAME

UDT の名前

UDT の名前

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

UDT を含むカタログの名前

UDT を含むカタログの名前

SS_UDT_SCHEMA_NAME

UDT を含むスキーマの名前

UDT を含むスキーマの名前

SS_UDT_ASSEMBLY_TYPE_NAME

UDT の完全修飾名

UDT の完全修飾名

最後の 3 つの列はドライバ固有の列です。これらの列は、ODBC で定義された列の後で、SQLColumns または SQLProcedureColumns の結果セットに既にあるドライバ固有の列の前に追加されます。

個々の UDT またはジェネリック型 "udt" に対しては、SQLGetTypeInfo から行が返されません。

バインドと変換

SQL から C データ型への変換としてサポートされているものは次のとおりです。

変換対象

SQL_SS_UDT

SQL_C_WCHAR

サポート *

SQL_C_BINARY

サポート

SQL_C_CHAR

サポート *

* バイナリ データが 16 進文字列に変換されます。

C から SQL データ型への変換としてサポートされているものは次のとおりです。

変換対象

SQL_SS_UDT

SQL_C_WCHAR

サポート *

SQL_C_BINARY

サポート

SQL_C_CHAR

サポート *

* 16 進文字列からバイナリ データへの変換が行われます。

SQL_VARIANT による UDT のサポート

SQL_VARIANT 列では UDT がサポートされません。

BCP による UDT のサポート

UDT 値は、文字またはバイナリ値としてのみインポートおよびエクスポートできます。

UDT に対する下位クライアントの動作

UDT に対しては、下位クライアントで次のように型マッピングが行われます。

サーバーのバージョン

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

大きな CLR UDT をサポートする ODBC 関数

ここでは、大きな CLR UDT をサポートするための、SQL Server Native Client の ODBC 関数に対する変更について説明します。

SQLBindCol

UDT 結果列の値は、このトピックの「バインドと変換」で説明したように、SQL データ型から C データ型に変換されます。

SQLBindParameter

UDT に必要な値は次のとおりです。

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

UDT に対して返される値は、このトピックの「結果の記述子フィールド」で説明したとおりです。

SQLColumns

UDT に対して返される値は、このトピックの「SQLColumns および SQLProcedureColumns から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。

SQLDescribeCol

UDT に対して返される値は次のとおりです。

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

UDT に対して返される値は次のとおりです。

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

UDT に対して返される値は次のとおりです。

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

UDT に対して返される値は、このトピックの「SQLColumns および SQLProcedureColumns から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。

SQLProcedureColumns

UDT に対して返される値は、このトピックの「SQLColumns および SQLProcedureColumns から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。

SQLPutData

UDT パラメータの値は、このトピックの「バインドと変換」で説明したように、C データ型から SQL データ型に変換されます。

SQLSetDescField

新しい型で使用できる記述子フィールドは、このトピックの「パラメータの記述子フィールド」および「結果の記述子フィールド」で説明したとおりです。

SQLSetDescRec

UDT に対して許可される値は次のとおりです。

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 の各 UDT 列に対して返される値は、このトピックの「SQLColumns および SQLProcedureColumns から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。