Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformní systém (PDW)
Nativní klientský ODBC ovladač SQL Server zpřístupňuje pouze specifická deskriptorová pole pro implementační řádky (IRD). V rámci IRD jsou pole SQL Server descriptorů odkazována pomocí specifických sloupcových atributů ovladače. Pro informace o úplném seznamu dostupných specifických deskriptorových polí pro ovladače viz SQLColAttribute.
Deskriptorová pole obsahující řetězce sloupců jsou často řetězce nulové délky. Všechny hodnoty deskriptorů specifické pro SQL Server jsou pouze pro čtení.
Stejně jako atributy získané pomocí SQLColAttribute jsou pro všechny sloupce ve výsledné sadě hlášeny deskorová pole, která hlásí atributy na úrovni řádku (například SQL_CA_SS_COMPUTE_ID).
SQLGetDescField a Table-Valued parametry
SQLGetDescField lze použít k získání hodnot pro rozšířené atributy tabulkových parametrů a tabulkových parametrů. Pro více informací o tabulkových parametrech viz Table-Valued Parametry (ODBC).
Podpora SQLGetDescField pro vylepšené funkce data a času
Pro informace o deskriptorových polích dostupných s novými typy dat/času viz metadata parametrů a výsledků.
Další informace naleznete v tématu vylepšení data a času (ODBC).
Od SQL Server 2012 (11.x) může SQLGetDescField vracet SQL_C_SS_TIME2 (pro typy času) nebo SQL_C_SS_TIMESTAMPOFFSET (pro datetimeoffset) místo SQL_C_BINARY, pokud vaše aplikace používá ODBC 3.8.
SQLGetDescField podpora pro velké CLR UDT
SQLGetDescField podporuje velké uživatelsky definované typy CLR (UDT). Další informace najdete v tématu
SQLGetDescField Support for Sparse Columns
SQLGetDescField lze použít k dotazování nového SQL_CA_SS_IS_COLUMN_SET pole IRD k určení, zda je sloupec column_set .
Pro více informací viz 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);
}