SQLGetDescField

SQL Server Native Client ODBC ドライバでは、IRD (実装行記述子) 専用のドライバ固有の記述子フィールドが公開されます。IRD 内では、ドライバ固有の列属性から SQL Server 記述子フィールドが参照されます。使用できるドライバ固有の記述子フィールドの完全な一覧については、「SQLColAttribute」を参照してください。

列 ID 文字列を含む記述子フィールドは、多くの場合、長さが 0 の文字列になります。SQL Server 固有のすべての記述子フィールドの値は読み取り専用です。

SQLColAttribute を使用して取得する属性と同様に、行レベルの属性 (SQL_CA_SS_COMPUTE_ID など) を報告する記述子フィールドは、結果セット内のすべての列に対して報告されます。

SQLGetDescField とテーブル値パラメータ

SQLGetDescField を使用すると、テーブル値パラメータおよびテーブル値パラメータ列の拡張属性の値を取得できます。テーブル値パラメータの詳細については、「テーブル値パラメータ (ODBC)」を参照してください。

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

新しい date 型または time 型で使用できる記述子フィールドの詳細については、「パラメータと結果のメタデータ」を参照してください。

詳細については、「日付/時刻の強化 (ODBC)」を参照してください。

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

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

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

SQLGetDescField では、新しい IRD フィールド SQL_CA_SS_IS_COLUMN_SET に対してクエリを実行し、列が column_set 列かどうかを確認できます。

詳細については、「スパース列のサポート (ODBC)」を参照してください。

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);
    }

関連項目

概念

その他の技術情報