Compartir a través de


SQLGetDescField

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

Los campos descriptores que contienen cadenas de identificador de columna suelen ser cadenas de longitud cero. Todos los valores de campo de descriptor específicos de SQL Server son de solo lectura.

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

Parámetros SQLGetDescField y Table-Valued

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

Compatibilidad con SQLGetDescField para características mejoradas de fecha y hora

Para obtener información sobre los campos descriptores disponibles con los nuevos tipos de fecha y hora, vea Parámetros y metadatos de resultados.

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

A partir de SQL Server 2012, SQLGetDescField puede devolver SQL_C_SS_TIME2 (para time tipos) o SQL_C_SS_TIMESTAMPOFFSET (para datetimeoffset) en lugar de SQL_C_BINARY, si la aplicación usa ODBC 3.8.

Compatibilidad con SQLGetDescField para UDT clR grandes

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

Compatibilidad con SQLGetDescField para columnas dispersas

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

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

Véase también

función SQLGetDescField
Detalles de implementación de la API de ODBC