SQLGetDescField
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics 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);
}