SQLGetDescFieldSQLGetDescField

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL ServerSQL Server Native Client ODBC ドライバーのみ実装行記述子 (IRD) のドライバー固有の記述子フィールドを公開します。The SQL ServerSQL Server Native Client ODBC driver exposes driver-specific descriptor fields for the implementation row descriptor (IRD) only. IRD 内SQL ServerSQL Server記述子フィールドは、ドライバー固有の列の属性によって参照されます。Within the IRD, SQL ServerSQL Server descriptor fields are referenced through driver-specific column attributes. 使用可能なドライバー固有の記述子フィールドの完全な一覧については、次を参照してください。 SQLColAttributeします。For information about a complete list of available driver-specific descriptor fields, see SQLColAttribute.

列 ID 文字列を含む記述子フィールドは、多くの場合、長さが 0 の文字列になります。Descriptor fields that contain column identifier strings are often zero-length strings. SQL ServerSQL Server 固有のすべての記述子フィールドの値は読み取り専用です。All SQL ServerSQL Server-specific descriptor field values are read-only.

SQLColAttribute では属性のようがレポートの行レベルの属性 (SQL_CA_SS_COMPUTE_ID など) は報告される結果セット内のすべての列の記述子フィールドを取得します。Like attributes retrieved with SQLColAttribute, descriptor fields that report row-level attributes (such as SQL_CA_SS_COMPUTE_ID) are reported for all columns in the result set.

SQLGetDescField とテーブル値パラメーターSQLGetDescField and Table-Valued Parameters

SQLGetDescField は、テーブル値パラメーターおよびテーブル値パラメーター列の拡張属性の値を取得できます。SQLGetDescField can be used to get values for extended attributes of table-valued parameters and table-valued parameter columns. テーブル値パラメーターの詳細については、次を参照してください。テーブル値パラメーター (ODBC)します。For more information about table-valued parameters, see Table-Valued Parameters (ODBC).

SQLGetDescField による機能強化された日付と時刻のサポートSQLGetDescField Support for Enhanced Date and Time Features

新しい日付/時刻型で使用できる記述子フィールドについては、次を参照してください。パラメーターと結果のメタデータします。For information about the descriptor fields available with the new date/time types, see Parameter and Result Metadata.

詳細については、次を参照してください。日付と時刻の強化(ODBC)します。For more information, see Date and Time Improvements (ODBC).

以降でSQL Server 2012 (11.x)SQL Server 2012 (11.x)、SQLGetDescField を返すことができますSQL_C_SS_TIME2 (の時間型) またはSQL_C_SS_TIMESTAMPOFFSET (のdatetimeoffset) の代わりにSQL_C_BINARY場合、アプリケーションで ODBC 3.8 が使用されます。Beginning in SQL Server 2012 (11.x)SQL Server 2012 (11.x), SQLGetDescField can return SQL_C_SS_TIME2 (for time types) or SQL_C_SS_TIMESTAMPOFFSET (for datetimeoffset) instead of SQL_C_BINARY, if your application uses ODBC 3.8.

SQLGetDescField による大きな CLR UDT のサポートSQLGetDescField Support for Large CLR UDTs

SQLGetDescField大きなの CLR ユーザー定義型 (Udt) をサポートしています。SQLGetDescField supports large CLR user-defined types (UDTs). 詳細については、次を参照してください。 Large CLR User-Defined 型(ODBC)します。For more information, see Large CLR User-Defined Types (ODBC).

SQLGetDescField によるスパース列のサポートSQLGetDescField Support for Sparse Columns

SQLGetDescField は、新しい IRD フィールド SQL_CA_SS_IS_COLUMN_SET を決定する列がクエリに使用できる、 column_set列。SQLGetDescField can be used to query the new IRD field SQL_CA_SS_IS_COLUMN_SET to determine if a column is a column_set column.

詳細については、次を参照してください。スパース列のサポート(ODBC)します。For more information, see Sparse Columns Support (ODBC).

Example

typedef struct tagCOMPUTEBYLIST  
    {  
    SQLSMALLINT nBys;  
    SQLSMALLINT aByList[1];  
    } COMPUTEBYLIST;  
typedef COMPUTEBYLIST* PCOMPUTEBYLIST;   
  
SQLHDESC    hIRD;   
SQLINTEGER  cbIRD;   
SQLINTEGER  nSet = 0;   
  
// . . .  
// Execute a statement that contains a COMPUTE clause,  
//  then get the descriptor handle of the IRD and  
//  get some IRD values.  
  
SQLGetStmtAttr(g_hStmt, SQL_ATTR_IMP_ROW_DESC,  
    (SQLPOINTER) &hIRD, sizeof(SQLHDESC), &cbIRD);  
  
// For statement-wide column attributes, any  
//  descriptor record will do. You know that 1 exists,  
//  so use it.  
SQLGetDescField(hIRD, 1, SQL_CA_SS_NUM_COMPUTES,  
    (SQLPOINTER) &nComputes, SQL_IS_INTEGER, &cbIRD);  
  
if (nSet == 0)  
    {  
    SQLINTEGER      nOrderID;  
  
    printf_s("Normal result set.\n");  
  
    for (nCol = 0; nCol < nCols; nCol++)  
        {  
        SQLGetDescField(hIRD, nCol+1,  
            SQL_CA_SS_COLUMN_ORDER,  
            (SQLPOINTER) &nOrderID, SQL_IS_INTEGER,  
            &cbIRD);  
  
        if (nOrderID != 0)  
            {  
            printf_s("Col in ORDER BY, pos: %ld",  
                nOrderID);  
            }  
            printf_s("\n");  
        }  
  
    printf_s("\n");  
    }  
else  
    {  
    PCOMPUTEBYLIST  pByList;  
    SQLSMALLINT     nBy;  
    SQLINTEGER      nColID;  
  
    printf_s("Computed result set number: %lu\n",  
        nSet);  
  
    SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_BYLIST,  
        (SQLPOINTER) &pByList, SQL_IS_INTEGER,  
        &cbIRD);  
  
    if (pByList != NULL)  
        {  
        printf_s("Clause ordered by columns: ");  
        for (nBy = 0; nBy < pByList->nBys; )  
            {  
            printf_s("%u", pByList->aByList[nBy]);  
            nBy++;  
  
            if (nBy == pByList->nBys)  
                {  
                printf_s("\n");  
                }  
            else  
                {  
                printf_s(", ");  
                }  
            }  
        }  
    else  
        {  
        printf_s("Compute clause set not ordered.\n");  
        }  
  
    for (nCol = 0; nCol < nCols; nCol++)  
        {  
        SQLGetDescField(hIRD, nCol+1,  
            SQL_CA_SS_COLUMN_ID, (SQLPOINTER) &nColID,  
            SQL_IS_INTEGER, &cbIRD);  
        printf_s("ColumnID: %lu, nColID);  
        }  
    printf_s("\n");  
    }  
  
if (SQLMoreResults(g_hStmt) == SQL_SUCCESS)  
    {  
    // Determine the result set indicator.  
    SQLGetDescField(hIRD, 1, SQL_CA_SS_COMPUTE_ID,  
        (SQLPOINTER) &nSet, SQL_IS_INTEGER, &cbIRD);  
    }  

参照See Also

SQLGetDescField 関数 SQLGetDescField Function
ODBC API 実装の詳細ODBC API Implementation Details