SQLGetDescField
Il driver ODBC SQL Server Native Client espone solo i campi descrittori specifici del driver per il descrittore di riga di implementazione (IRD). All'interno dei campi IRD, SQL Server descrittore vengono a cui si fa riferimento tramite attributi di colonna specifici del driver. Per informazioni su un elenco completo dei campi descrittori 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 di campo del descrittore specifici di SQL Server sono di sola lettura.
Come gli attributi recuperati con SQLColAttribute, i campi descrittori che segnalano attributi a livello di riga (ad esempio SQL_CA_SS_COMPUTE_ID) vengono segnalati per tutte le colonne del set di risultati.
SQLGetDescField e parametri con valori di tabella
SQLGetDescField può essere usato per ottenere valori per attributi estesi di parametri con valori di tabella e colonne di parametri con valori di tabella. Per altre informazioni sui parametri con valori di tabella, vedere Parametri con valori di tabella (ODBC).
Supporto di SQLGetDescField per le caratteristiche avanzate di data e ora
Per informazioni sui campi descrittori disponibili con i nuovi tipi di data/ora, vedere Parametri e metadati dei risultati.
Per altre informazioni, vedere Miglioramenti di data e ora (ODBC).
A partire da SQL Server 2012, SQLGetDescField può restituire SQL_C_SS_TIME2
(per tipi) o SQL_C_SS_TIMESTAMPOFFSET
(per time
datetimeoffset
) anziché SQL_C_BINARY
, se l'applicazione usa ODBC 3.8.
Supporto di SQLGetDescField per tipi definiti dall'utente CLR di grandi dimensioni
SQLGetDescField
supporta i tipi CLR definiti dall'utente di grandi dimensioni. Per altre informazioni, vedere Tipi di User-Defined CLR di grandi dimensioni (ODBC).
Supporto di SQLGetDescField per colonne di tipo sparse
SQLGetDescField può essere usato per eseguire query sul nuovo campo IRD SQL_CA_SS_IS_COLUMN_SET per determinare se una colonna è una column_set
colonna.
Per altre informazioni, vedere Supporto colonne 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
Funzione SQLGetDescField
Dettagli di implementazione dell'API ODBC