Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der ODBC-Treiber für SQL Server Native Client macht nur treiberspezifische Deskriptorfelder für die Implementierungszeilenbeschreibung (IRD) verfügbar. Innerhalb der IRD werden SQL Server-Deskriptorfelder über treiberspezifische Spaltenattribute referenziert. Informationen zu einer vollständigen Liste der verfügbaren treiberspezifischen Beschreibungsfelder finden Sie unter SQLColAttribute.
Deskriptorfelder, die Spaltenbezeichnerzeichenfolgen enthalten, sind häufig leere Zeichenfolgen. Alle SQL Server-spezifischen Deskriptorfeldwerte sind schreibgeschützt.
Wie Attribute, die mit SQLColAttribute abgerufen wurden, werden Deskriptorfelder, die Attribute auf Zeilenebene (z. B. SQL_CA_SS_COMPUTE_ID) für alle Spalten im Resultset melden, gemeldet.
SQLGetDescField und Table-Valued Parameter
SQLGetDescField kann verwendet werden, um Werte für erweiterte Attribute von Tabellenwertparametern und Tabellenwertparameterspalten abzurufen. Weitere Informationen zu Tabellenwertparametern finden Sie unter "Table-Valued Parameters (ODBC)".
SQLGetDescField-Unterstützung für erweiterte Datums- und Uhrzeitfeatures
Informationen zu den Beschreibungsfeldern, die mit den neuen Datums-/Uhrzeittypen verfügbar sind, finden Sie unter Parameter- und Ergebnismetadaten.
Weitere Informationen finden Sie unter "Datums- und Uhrzeitverbesserungen (ODBC)".
Ab SQL Server 2012 kann SQL_C_SS_TIME2 SQLGetDescField (für Typen) oder SQL_C_SS_TIMESTAMPOFFSET (für timedatetimeoffset) anstelle von SQL_C_BINARY, wenn Ihre Anwendung ODBC 3.8 verwendet.
SQLGetDescField-Unterstützung für große CLR-UDTs
SQLGetDescField unterstützt große benutzerdefinierte CLR-Typen (UDTs). Weitere Informationen finden Sie unter "Large CLR User-Defined Types (ODBC)".
SQLGetDescField-Unterstützung für sparse Spalten
SQLGetDescField kann zum Abfragen des neuen IRD-Felds SQL_CA_SS_IS_COLUMN_SET verwendet werden, um zu ermitteln, ob es sich bei einer Spalte um eine column_set Spalte handelt.
Weitere Informationen finden Sie unter Unterstützung für Sparse Columns (ODBC).For more information, see Sparse Columns Support (ODBC).
Beispiel
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);
}