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 SQL Server Native Client-ODBC-Treiber stellt nur treiberspezifische Deskriptorfelder für den Implementierungszeilendeskriptor (IRD) zur Verfügung. Innerhalb des IRD wird auf SQL Server-Deskriptorfelder durch treiberspezifische Spaltenattribute verwiesen. Informationen über eine vollständige Liste verfügbarer treiberspezifischer Deskriptorfelder finden Sie unter SQLColAttribute.
Deskriptorfelder, die Spaltenbezeichner-Zeichenfolgen enthalten, sind häufig Zeichenfolgen der Länge 0 (null). Alle SQL Server-spezifischen Deskriptorfeldwerte sind schreibgeschützt.
Ähnlich wie mit SQLColAttribute abgerufene Attribute werden auch Deskriptorfelder, die Attribute auf Zeilenebene (wie SQL_CA_SS_COMPUTE_ID) melden, für alle Spalten im Resultset gemeldet.
SQLGetDescField und Tabellenwertparameter
SQLGetDescField kann verwendet werden, um Werte für erweiterte Attribute von Tabellenwertparametern und Tabellenwertparameter-Spalten abzurufen. Weitere Informationen zu Tabellenwertparametern finden Sie unter Tabellenwertparameter (ODBC).
SQLGetDescField-Unterstützung für erweiterte Funktionen für Datum und Uhrzeit
Informationen über die mit den neuen Datums-/Uhrzeittypen verfügbaren Deskriptorfelder finden Sie unter Parameter- und Ergebnismetadaten.
Weitere Informationen finden Sie unter Datums-/Uhrzeitverbesserungen (ODBC).
Ab SQL Server 2012 kann SQLGetDescField SQL_C_SS_TIME2 (für time-Typen) oder SQL_C_SS_TIMESTAMPOFFSET (für datetimeoffset) anstelle von SQL_C_BINARY zurückgeben, wenn die Anwendung ODBC 3.8 verwendet.
SQLGetDescField-Unterstützung für große CLR-UDTs
SQLGetDescField unterstützt große benutzerdefinierte CLR-Typen (User-Defined Types, UDTs). Weitere Informationen finden Sie unter Große benutzerdefinierte CLR-Typen (ODBC).
SQLGetDescField-Unterstützung für Spalten mit geringer Dichte
SQLGetDescField kann für die Abfrage des neuen IRD-Felds SQL_CA_SS_IS_COLUMN_SET verwendet werden, um zu bestimmen, ob eine Spalte eine column_set-Spalte ist.
Weitere Informationen finden Sie unter Unterstützung für Spalten mit geringer Dichte (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);
}
Siehe auch
Konzepte
ODBC-API-Implementierungsdetails