SQLGetDescField

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server Native Client ODBC 驅動程式只會公開實作資料列描述元 (IRD) 的驅動程式特定描述元欄位。 在 IRD 中,SQL Server 描述元欄位會透過驅動程式特定的資料行屬性來參考。 如需可用驅動程式特定描述元欄位完整清單的詳細資訊,請參閱 SQLColAttribute

包含資料行識別碼字串的描述元欄位通常是長度為零的字串。 所有 SQL Server 特定的描述元域值都是唯讀的。

如同使用 SQLColAttribute 擷取的屬性,報告資料列層級屬性(例如SQL_CA_SS_COMPUTE_ID)的描述項欄位會針對結果集中的所有資料行報告。

SQLGetDescField 和資料表值參數

SQLGetDescField 可用來取得資料表值參數和資料表值參數資料行之擴充屬性的值。 如需資料表值參數的詳細資訊,請參閱 資料表值參數 (ODBC)

增強日期和時間功能的 SQLGetDescField 支援

如需新日期/時間類型可用描述元欄位的相關資訊,請參閱 參數和結果中繼資料

如需詳細資訊,請參閱 日期和時間改善 (ODBC)

從 SQL Server 2012 (11.x) 開始,如果您的應用程式使用 ODBC 3.8,SQLGetDescField 可以傳回 SQL_C_SS_TIME2 (適用于 時間 類型)或 SQL_C_SS_TIMESTAMPOFFSET (適用于 datetimeoffset ),而不是 SQL_C_BINARY

大型 CLR UDT 的 SQLGetDescField 支援

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

另請參閱

SQLGetDescField 函式
ODBC API 實作詳細資料