次の方法で共有


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

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

ODBC による大きな CLR UDT のサポートを示したサンプルについては、「大きな UDT のサポート」を参照してください。

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 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 から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。

関連項目

概念

大きな CLR ユーザー定義型