Partager via


SQLGetDescField

Le pilote ODBC SQL Server Native Client expose uniquement les champs de descripteur spécifiques au pilote pour le descripteur de ligne d'implémentation (IRD). Dans le descripteur IRD, les champs de descripteur SQL Server sont référencés par le biais d'attributs de colonne spécifiques aux pilotes. 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 des champs 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 dans le jeu de résultats.

SQLGetDescField et paramètres table

SQLGetDescField peut être utilisé pour obtenir des valeurs pour les attributs étendus et les 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 Métadonnées de paramètres et de résultats.

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

Prise en charge SQLGetDescField pour les 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 CLR volumineux définis par l'utilisateur (ODBC).

Prise en charge par SQLGetDescField des colonnes fragmentées

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

Pour plus d'informations, consultez Prise en charge des colonnes fragmentées (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);
    }