SQLGetDescField
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Der SQL Server Native Client ODBC-Treiber macht treiberspezifische Deskriptorfelder nur für den Implementierungszeilendeskriptor (IRD) verfügbar. Innerhalb der IRD werden SQL Server Deskriptorfelder durch treiberspezifische Spaltenattribute referenziert. Informationen zu einer vollständigen Liste der verfügbaren treiberspezifischen 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.
Wie mit SQLColAttribute abgerufene Attribute werden Deskriptorfelder, die Attribute auf Zeilenebene melden (z. B. SQL_CA_SS_COMPUTE_ID), für alle Spalten im Resultset gemeldet.
SQLGetDescField und Tabellenwertparameter
SQLGetDescField kann verwendet werden, um Werte für erweiterte Attribute von Tabellenwertparametern und Tabellenwertparameterspalten abzurufen. Weitere Informationen zu Tabellenwertparametern finden Sie unter Tabellenwertparameter (ODBC).
SQLGetDescField-Unterstützung für erweiterte Funktionen für Datum und Uhrzeit
Informationen zu den Mit den neuen Datums-/Uhrzeittypen verfügbaren Deskriptorfeldern finden Sie unter Parameter- und Ergebnismetadaten.
Weitere Informationen finden Sie unter Verbesserungen an Datum und Uhrzeit (ODBC).
Ab SQL Server 2012 (11.x) kann SQLGetDescField SQL_C_SS_TIME2 (für Zeittypen) oder SQL_C_SS_TIMESTAMPOFFSET (für datetimeoffset) anstelle von SQL_C_BINARY zurückgeben, 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 Spalten mit geringer Dichte
SQLGetDescField kann verwendet werden, um das neue IRD-Feld SQL_CA_SS_IS_COLUMN_SET abzufragen, um zu bestimmen, ob eine Spalte eine column_set Spalte ist.
Weitere Informationen finden Sie unter Unterstützung von Sparsespalten (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);
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für