SQLGetDescField
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Il driver ODBC di SQL Server Native Client espone solo i campi del descrittore di riga di implementazione (IRD) specifici del driver. All'interno di IRD, i campi descrittori di SQL Server vengono a cui viene fatto 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 dei campi del descrittore specifici di SQL Server sono di sola lettura.
Analogamente agli 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 gli 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 descrittore 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 (11.x), SQLGetDescField può restituire SQL_C_SS_TIME2 (per i tipi di tempo) o SQL_C_SS_TIMESTAMPOFFSET (per 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 tipi CLR definiti dall'utente di grandi dimensioni. Per altre informazioni, vedere Tipi CLR definiti dall'utente (ODBC) di grandi dimensioni.
Supporto di SQLGetDescField per colonne di tipo sparse
È possibile usare SQLGetDescField per eseguire una query sul nuovo campo IRD SQL_CA_SS_IS_COLUMN_SET per determinare se una colonna è una colonna column_set .
Per altre informazioni, vedere Supporto 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);
}
Vedi anche
Funzione SQLGetDescField
Dettagli di implementazione dell'API ODBC