SQLGetDescField
Il driver ODBC di SQL Server Native Client espone campi di descrizione specifici del driver solo per il descrittore della riga di implementazione (IRD, Implementation Row Descriptor). Nell'IRD ai campi di descrizione di SQL Server viene fatto riferimento tramite attributi di colonna specifici del driver. Per informazioni su un elenco completo dei campi di descrizione specifici del driver disponibili, vedere SQLColAttribute.
I campi di descrizione che contengono stringhe dell'identificatore di colonna sono spesso stringhe di lunghezza zero. Tutti i valori dei campi di descrizione specifici di SQL Server sono di sola lettura.
Analogamente a quanto avviene con gli attributi recuperati con SQLColAttribute, i campi di descrizione che segnalano attributi a livello di riga (ad esempio SQL_CA_SS_COMPUTE_ID) vengono indicati per tutte le colonne del set di risultati.
SQLGetDescField e parametri con valori di tabella
SQLGetDescField può essere utilizzato per ottenere i valori per gli attributi estesi dei parametri con valori di tabella e le relative colonne. Per ulteriori informazioni sui parametri con valori di tabella, vedere Parametri con valori di tabella (ODBC).
Supporto di SQLGetDescField per le funzionalità avanzate di data e ora
Per informazioni sui campi di descrizione disponibili con i nuovi tipi data/ora, vedere Metadati per parametri e risultati.
Per ulteriori informazioni, vedere Miglioramenti relativi a data e ora (ODBC).
Supporto di SQLGetDescField per tipi definiti dall'utente CLR di grandi dimensioni
SQLGetDescField supporta i tipi CLR definiti dall'utente di grandi dimensioni. Per ulteriori informazioni, vedere Tipi CLR definiti dall'utente di grandi dimensioni (ODBC).
Supporto di SQLGetDescField per colonne di tipo sparse
SQLGetDescField può essere utilizzato per eseguire query sul nuovo campo IRD, SQL_CA_SS_IS_COLUMN_SET, per determinare se una colonna è una colonna column_set.
Per ulteriori informazioni, vedere Supporto per colonne di tipo sparse (ODBC).
Esempio
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);
}
Vedere anche