Compartir a través de


SQLGetDescField

El controlador ODBC de SQL Server Native Client sólo expone campos de descriptor específicos del controlador para el descriptor de fila de implementación (IRD). En IRD, se hace referencia a los campos de descriptor de SQL Server a través de atributos de columna específicos del controlador. Para obtener información sobre una lista completa de campos de descriptor específicos del controlador disponibles, vea SQLColAttribute.

Los campos de descriptor que contienen cadenas de identificador de columna son a menudo cadenas de longitud cero. Todos los valores de campos de descriptor específicos de SQL Server son de sólo lectura.

Al igual que los atributos que se recuperan con SQLColAttribute, los campos de descriptor que notifican atributos de fila (como SQL_CA_SS_COMPUTE_ID) se notifican para todas las columnas del conjunto de resultados.

SQLGetDescField y parámetros con valores de tabla

SQLGetDescField se puede utilizar para obtener valores de atributos extendidos de parámetros con valores de tabla y columnas de parámetros con valores de tabla. Para obtener más información acerca de los parámetros con valores de tabla, vea Parámetros con valores de tabla (ODBC).

SQLGetDescField admite las características mejoradas de fecha y hora

Para obtener información sobre los campos de descriptor disponibles con los nuevos tipos de fecha y hora, vea Metadatos de parámetros y resultados.

Para obtener más información, vea Mejoras en los tipos de datos de fecha y hora (ODBC).

SQLGetDescField admite UDT CLR grandes

SQLGetDescField admite los tipos definidos por el usuario CLR grandes (UDT). Para obtener más información, vea Tipos CLR grandes definidos por el usuario (ODBC).

SQLGetDescField admite columnas dispersas

SQLGetDescField se puede utilizar para consultar el nuevo campo IRD SQL_CA_SS_IS_COLUMN_SET y determinar si una columna es una columna column_set.

Para obtener más información, vea Compatibilidad con columnas dispersas (ODBC).

Ejemplo

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