SQLGetDescField

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Le pilote ODBC SQL Server Native Client expose des champs de descripteur spécifiques au pilote pour le descripteur de ligne d’implémentation (IRD) uniquement. Dans l’IRD, SQL Server champs de descripteur sont référencés via des attributs de colonne spécifiques au pilote. Pour obtenir une liste complète des champs de descripteur spécifiques au pilote disponibles, consultez SQLColAttribute.

Les champs de descripteur qui contiennent des chaînes d'identificateur de colonne sont souvent des chaînes de longueur nulle. Toutes les valeurs de champ de descripteur spécifiques à SQL Server sont en lecture seule.

À l’instar des attributs récupérés avec SQLColAttribute, les champs de descripteur qui signalent des attributs au niveau des lignes (tels que SQL_CA_SS_COMPUTE_ID) sont signalés pour toutes les colonnes du jeu de résultats.

SQLGetDescField et paramètres table

SQLGetDescField peut être utilisé pour obtenir des valeurs pour les attributs étendus des paramètres table et des colonnes de paramètres table. Pour plus d’informations sur les paramètres table, consultez Paramètres table (ODBC).

Prise en charge par SQLGetDescField des fonctionnalités de date et heure améliorées

Pour plus d'informations sur les champs de descripteur disponibles avec les nouveaux types date/heure, consultez Parameter and Result Metadata.

Pour plus d’informations, consultez Améliorations de date et d’heure (ODBC).

À compter de SQL Server 2012 (11.x), SQLGetDescField peut retourner SQL_C_SS_TIME2 (pour les types de temps) ou SQL_C_SS_TIMESTAMPOFFSET (pour datetimeoffset) au lieu de SQL_C_BINARY, si votre application utilise ODBC 3.8.

Prise en charge par SQLGetDescField des types CLR volumineux définis par l'utilisateur

SQLGetDescField prend en charge les types CLR volumineux définis par l'utilisateur. Pour plus d’informations, consultez Types de User-Defined CLR volumineux (ODBC).

Prise en charge par SQLGetDescField des colonnes éparses

SQLGetDescField peut être utilisé pour interroger le nouveau champ IRD SQL_CA_SS_IS_COLUMN_SET afin de déterminer si une colonne est une colonne column_set .

Pour plus d’informations, consultez Prise en charge des colonnes éparses (ODBC).

Exemple

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);  
    }  

Voir aussi

Fonction SQLGetDescField
Détails de l’implémentation d’API ODBC