SQLGetDescField
The SQL Server Native klient ODBC driver exposes driver-specific descriptor fields for the implementation row descriptor (IRD) only. W ramach IRD, SQL Server pola deskryptora są odwoływać za pomocą atrybutów specyficznych dla sterownika kolumna. Aby uzyskać informacje na temat pełną listę pól dostępnych deskryptora specyficzne dla sterownika zobacz SQLColAttribute.
Pola deskryptora, które zawierają kolumna Identyfikator ciągi są często ciągi znaków o zerowej długości.Wszystkie SQL Server-określonego deskryptora wartości pole są odczytywane - tylko.
Jak pobrać atrybutów z SQLColAttribute, pola deskryptora raportujących poziom wiersza atrybutów (takie jak SQL_CA_SS_COMPUTE_ID) są raportowane dla wszystkich kolumn zestaw wyników.
SQLGetDescField i parametry Valued tabela
SQLGetDescField można uzyskać wartości dla atrybutów rozszerzonych wycenione tabela parametrów i parametr wycenione tabela kolumn.Aby uzyskać więcej informacji na temat parametrów wycenione tabela zobacz Tabela Valued parametry (ODBC).
Obsługa SQLGetDescField Data rozszerzony i czas funkcje
Aby uzyskać informacje dotyczące dostępnych pól deskryptora z typami nowe data/godziny zobacz Parametr i wynik metadane.
Aby uzyskać więcej informacji zobaczData / czas ulepszenia (ODBC).
Obsługa SQLGetDescField duże UDTs CLR
SQLGetDescField obsługuje dużą CLR typów zdefiniowanych przez użytkownika (UDTs).Aby uzyskać więcej informacji zobaczDuże CLR typy zdefiniowane przez użytkownika (ODBC).
Obsługa SQLGetDescField odstępem kolumny
SQLGetDescField można zbadać nowe pole IRD SQL_CA_SS_IS_COLUMN_SET można określić, czy kolumna jest column_set Kolumna.
Aby uzyskać więcej informacji zobaczObsługa rozrzedzenia kolumny (ODBC).
Przykład
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);
}
See Also