SQLGetDescFieldSQLGetDescField

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) 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)以降では、アプリケーションで ODBC 3.8 が使用されている場合、SQLGetDescField はSQL_C_BINARYではなくSQL_C_SS_TIME2 ( time型の場合) またはSQL_C_SS_TIMESTAMPOFFSET ( datetimeoffsetの場合) を返すことができます。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 ユーザー定義(型)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