SQLColAttribute
適用対象: SQL Server Azure SQL データベース 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)」を参照してください。