Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Server Native Client ODBC-drivrutinen exponerar drivrutinsspecifika deskriptorfält endast för implementation row descriptor (IRD). Inom IRD refereras SQL Server-deskriptorfält via drivrutinsspecifika kolumnattribut. För information om en komplett lista över tillgängliga drivrutinsspecifika deskriptorfält, se SQLColAttribute.
Deskriptorfält som innehåller kolumnidentifierarsträngar är ofta strängar av nolllängd. Alla SQL Server-specifika deskriptorfältvärden är skrivskyddade.
Precis som attribut hämtade med SQLColAttribute rapporteras deskriptorfält som rapporterar radnivåattribut (såsom SQL_CA_SS_COMPUTE_ID) för alla kolumner i resultatuppsättningen.
SQLGetDescField och Table-Valued parametrar
SQLGetDescField kan användas för att hämta värden för utökade attribut för tabellvärda parametrar och tabellvärda parameterkolumner. För mer information om tabellvärda parametrar, se Table-Valued Parameters (ODBC).
SQLGetDescField-stöd för förbättrade datum- och tidsfunktioner
För information om de deskriptorfält som finns tillgängliga med de nya datum-/tidstyperna, se Parameter and Result Metadata.
Mer information finns i Förbättringar av datum och tid (ODBC).
Från och med SQL Server 2012 (11.x) kan SQLGetDescField returnera SQL_C_SS_TIME2 (för tidstyper) eller SQL_C_SS_TIMESTAMPOFFSET (för datetimeoffset) istället för SQL_C_BINARY, om din applikation använder ODBC 3.8.
SQLGetDescField-stöd för stora CLR UDT:er
SQLGetDescField stöder stora CLR-användardefinierade typer (UDT). Mer information finns i Large CLR User-Defined Types (ODBC).
SQLGetDescField-stöd för glesa kolumner
SQLGetDescField kan användas för att fråga det nya IRD-fältet SQL_CA_SS_IS_COLUMN_SET för att avgöra om en kolumn är en column_set kolumn.
För mer information, se Sparse Columns Support (ODBC).
Example
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);
}