SQLColAttribute

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

SQLColAttribute を使用して、準備または実行された ODBC ステートメントの結果セット列の属性を取得できます。 準備されたステートメントで SQLColAttribute を呼び出すと、SQL Server へのラウンドトリップが発生します。 SQL Server Native Client ODBC ドライバーは、ステートメントの実行の一部として結果セット列データを受け取るので、SQLExecute または SQLExecDirect の完了後にSQLColAttribute を呼び出してもサーバーラウンドトリップは行われません。

Note

ODBC 列識別子属性は、すべての SQL Server 結果セットで使用できるわけではありません。

フィールド ID 説明
SQL_COLUMN_TABLE_NAME サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。
SQL_DESC_BASE_COLUMN_NAME サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。
SQL_DESC_BASE_TABLE_NAME サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。
SQL_DESC_CATALOG_NAME データベース名。 サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。
SQL_DESC_LABEL すべての結果セットで使用できます。 値は、SQL_DESC_NAME フィールドの値と等しくなります。

列が式の結果か、式にラベル割り当てが含まれていない場合にのみ、フィールド長が 0 (ゼロ) になります。
SQL_DESC_NAME すべての結果セットで使用できます。 値は、SQL_DESC_LABEL フィールドの値と等しくなります。

列が式の結果か、式にラベル割り当てが含まれていない場合にのみ、フィールド長が 0 (ゼロ) になります。
SQL_DESC_SCHEMA_NAME 所有者名。 サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。

SELECT ステートメントの列に所有者名を指定した場合にのみ使用できます。
SQL_DESC_TABLE_NAME サーバー カーソルを生成するステートメントから取得した結果セットで使用できます。または、FOR BROWSE 句を含む実行済みの SELECT ステートメントで使用できます。
SQL_DESC_UNNAMED 結果セット内にあるすべての列に対する SQL_NAMED が返されます。ただしこれは、式の一部にラベル割り当てが含まれておらず、列がこの式の結果ではない場合に限ります。 SQL_DESC_UNNAMED が SQL_UNNAMED を返すときは、すべての ODBC 列の ID 属性には、その列に対して長さゼロの文字列が含まれます。

SQL Server Native Client ODBC ドライバーは、SET FMTONLY ステートメントを使用して、準備されたが実行されていないステートメントに対して SQLColAttribute が呼び出されたときにサーバーのオーバーヘッドを軽減します。

大きな値型の場合、 SQLColAttribute は次の値を返します。

フィールド ID 変更の説明
SQL_DESC_DISPLAY_SIZE 列のデータを表示する場合に必要となる最大文字数です。 大きな値型の列の場合、返される値は SQL_SS_LENGTH_UNLIMITED です。
SQL_DESC_LENGTH 結果セット内の列の実際の長さを返します。 大きな値型の列の場合、返される値は SQL_SS_LENGTH_UNLIMITED です。
SQL_DESC_OCTET_LENGTH 大きな値型の列の最大長を返します。 無制限のサイズを示す場合、SQL_SS_LENGTH_UNLIMITED を使用します。
SQL_DESC_PRECISION 大きな値型の列の場合、値 SQL_SS_LENGTH_UNLIMITED を返します。
SQL_DESC_TYPE 大きな値型の場合、SQL_VARCHAR、SQL_WVARCHAR、および SQL_VARBINARY を返します。
SQL_DESC_TYPE_NAME 大きな値型の場合、"varchar"、"varbinary"、"nvarchar" を返します。

すべてのバージョンで、準備された SQL ステートメントのバッチによって複数の結果セットが生成されるときは、最初の結果セットのみの列属性が報告されます。

次の列属性は、SQL Server Native Client ODBC ドライバーによって公開される拡張機能です。 SQL Server Native Client ODBC ドライバーは、 NumericAttrPtr パラメーター内のすべての値を返します。 WORD 配列へのポインターである SQL_CA_SS_COMPUTE_BYLIST を除き、SDWORD 型 (符号付き long 型) として値が返されます。

フィールド ID 返される値
SQL_CA_SS_COLUMN_HIDDEN* 参照される列が、FOR BROWSE 句を含む Transact-SQL SELECT ステートメントをサポートするために作成された非表示の主キーの一部である場合は、TRUE になります。
SQL_CA_SS_COLUMN_ID 現在の Transact-SQL SELECT ステートメント内にある COMPUTE 句の結果列の序数位置。
SQL_CA_SS_COLUMN_KEY* 参照される列が行の主キーの一部で、Transact-SQL SELECT ステートメントに FOR BROWSE 句が含まれる場合は、TRUE になります。
SQL_CA_SS_COLUMN_OP COMPUTE 句列の値に関連する集計演算子を指定する整数。 整数値の定義は sqlncli.h にあります。
SQL_CA_SS_COLUMN_ORDER ODBC または Transact-SQL SELECT ステートメントの ORDER BY 句内にある列の序数位置。
SQL_CA_SS_COLUMN_SIZE 列から取得したデータ値を SQL_C_BINARY 変数にバインドするのに必要な、バイト単位の最大長。
SQL_CA_SS_COLUMN_SSTYPE SQL Server の列に格納されたデータのネイティブ データ型。 型値の定義は sqlncli.h にあります。
SQL_CA_SS_COLUMN_UTYPE SQL Server における列のユーザー定義データ型に関する基本データ型。 型値の定義は sqlncli.h にあります。
SQL_CA_SS_COLUMN_VARYLEN 列のデータが可変長の場合は TRUE、それ以外の場合は FALSE です。
SQL_CA_SS_COMPUTE_BYLIST COMPUTE 句の BY 句で使用される列を指定する、WORD 型 (符号なし short 型) の配列へのポインター。 COMPUTE 句に BY が指定されていない場合、NULL ポインターを返します。

配列の最初の要素には、BY リスト列の数が含まれます。 もう 1 つの要素は列序数です。
SQL_CA_SS_COMPUTE_ID 現在の Transact-SQL SELECT ステートメントの COMPUTE 句の結果である行の computeid
SQL_CA_SS_NUM_COMPUTES 現在の Transact-SQL SELECT ステートメントで指定されている COMPUTE 句の数。
SQL_CA_SS_NUM_ORDERS ODBC または Transact-SQL SELECT ステートメントの ORDER BY 句で指定されている列の数。

* ステートメント属性SQL_SOPT_SS_HIDDEN_COLUMNSがSQL_HC_ONに設定されている場合に使用できます。

SQL Server 2005 (9.x) では、ドライバー固有の記述子フィールドが導入され、XML スキーマ コレクション名、スキーマ名、カタログ名をそれぞれ示す追加情報が提供されました。 これらのプロパティでは、英数字以外の文字が含まれる場合でも、引用符やエスケープ文字は必要ありません。 次の表では、追加された新しい記述子フィールドについて説明します。

列名 種類 説明
SQL_CA_SS_XML_SCHEMACOLLECTION_CATALOG_NAME CharacterAttributePtr XML スキーマ コレクション名が定義されているカタログの名前です。 カタログ名が見つからない場合は、この変数に空文字列が含まれます。

この情報は、IRD の SQL_DESC_SS_XML_SCHEMACOLLECTION_CATALOG_NAME レコード フィールドから返されます。このレコード フィールドは読み取りと書き込みが可能なフィールドです。
SQL_CA_SS_XML_SCHEMACOLLECTION_SCHEMA_NAM E CharacterAttributePtr XML スキーマ コレクション名が定義されているスキーマの名前です。 スキーマ名が見つからない場合は、この変数に空文字列が含まれます。

この情報は、IRD の SQL_DESC_SS_XML_SCHEMACOLLECTION_SCHEMA_NAME レコード フィールドから返されます。このレコード フィールドは読み取りと書き込み可能なフィールドです。
SQL_CA_SS_XML_SCHEMACOLLECTION_NAME CharacterAttributePtr XML スキーマ コレクションの名前です。 名前が見つからない場合は、この変数に空文字列が含まれます。

この情報は、IRD の SQL_DESC_SS_XML_SCHEMACOLLECTION_NAME レコード フィールドから返されます。このレコード フィールドは読み取りと書き込み可能なフィールドです。

また、SQL Server 2005 (9.x) では、新しいドライバー固有の記述子フィールドが導入され、結果セットのユーザー定義型 (UDT) 列またはストアド プロシージャまたはパラメーター化クエリの UDT パラメーターに関する追加情報が提供されました。 これらのプロパティでは、英数字以外の文字が含まれる場合でも、引用符やエスケープ文字は必要ありません。 次の表では、追加された新しい記述子フィールドについて説明します。

列名 種類 説明
SQL_CA_SS_UDT_CATALOG_NAME CharacterAttributePtr UDT を含むカタログの名前。
SQL_CA_SS_UDT_SCHEMA_NAME CharacterAttributePtr UDT を含むスキーマの名前。
SQL_CA_SS_UDT_TYPE_NAME CharacterAttributePtr UDT の名前
SQL_CA_SS_UDT_ASSEMBLY_TYPE_NAME CharacterAttributePtr UDT のアセンブリ修飾名。

UDT の名前を示すために、既存の記述子フィールド ID の SQL_DESC_TYPE_NAME が使用されます。 UDT 型の列の SQL_DESC_TYPE フィールドは SQL_SS_UDT です。

SQLColAttribute による機能強化された日付と時刻のサポート

日付/時刻型で返される値については、「 パラメーターと結果メタデータ」の「IRD フィールドで返される情報」セクションを参照してください。

詳細については、「 Date and Time Improvements (ODBC)」を参照してください。

SQLColAttribute による大きな CLR UDT のサポート

SQLColAttribute では、大きな CLR ユーザー定義型 (UDT) がサポートされます。 詳細については、「 Large CLR ユーザー定義型 (ODBC)を参照してください。

SQLColAttribute によるスパース列のサポート

SQLColAttribute は、新しい実装行記述子 (IRD) フィールド (SQL_CA_SS_IS_COLUMN_SET) を照会して、列が column_set 列であるかどうかを判断します。

詳細については、「 Sparse Columns Support (ODBC)」を参照してください。

参照

SQLColAttribute 関数
ODBC API 実装の詳細
SQLSetStmtAttr