大きな CLR ユーザー定義型 (ODBC)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
重要
SQL Server Native Client (SNAC) は同梱されていません。
- SQL Server 2022 (16.x) 以降のバージョン
- SQL Server Management Studio 19 以降のバージョン
SQL Server Native Client (SQLNCLI または SQLNCLI11) と従来の Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。
新しいプロジェクトの場合は、次のいずれかのドライバーを使用します。
SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。
このトピックでは、大きな共通言語ランタイム (CLR) ユーザー定義型 (UDT) をサポートするための、SQL Server Native Client の ODBC に対する変更について説明します。
大きな CLR UDT の ODBC サポートを示すサンプルについては、「 大きな UDT のサポートを参照してください。
SQL Server Native Client での大きな CLR UDT のサポートの詳細については、「 Large 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 data type (SQL データ型) | Value |
---|---|---|
CLR UDT | SQL_SS_UDT | -151 (sqlncli.h) |
次の表では、対応する構造体と ODBC C 型について説明します。 基本的に、CLR UDT は、追加のメタデータを持つ varbinary 型です。
SQL data type (SQL データ型) | メモリ レイアウト | C data type (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 パラメーターの場合、SQL_CA_SS_UDT_TYPE_NAMEは常に SQLSetDescField を使用して設定する必要があります。 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 の結果セットの既存のドライバー固有の列の前に追加されます。
SQLGetTypeInfo、個々の UDT、またはジェネリック型 "udt" の行は返されません。
バインドと変換
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 data type (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 data type (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 data type (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 data type (SQL データ型) | Type | サブタイプ | 長さ | 精度 | スケール |
---|---|---|---|---|---|
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 data type (SQL データ型) | Type | サブタイプ | 長さ | 精度 | スケール |
---|---|---|---|---|---|
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 から返される列のメタデータ (カタログ メタデータ)」で説明したとおりです。
参照
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示