SQLGetDescField

Si applica a:SQL ServerDatabase SQL diAzure Istanzagestita di SQL di Azure Azure Synapse Analytics PlatformSystem (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