Udostępnij za pośrednictwem


SQLGetDescField

SQL Server Sterownik ODBC macierzysty klient udostępnia pola deskryptora specyficzne dla sterownika dla realizacji wiersza deskryptora (IRD) tylko.W ramach IRD SQL Server pola deskryptora są wywoływane za pomocą atrybutów specyficznych dla sterownika kolumna.Informacje pełną listę pól dostępnych deskryptora specyficzne dla sterownika, zobacz SQLColAttribute.

Deskryptor pól, które zawierają kolumna Identyfikator ciągi są często ciągi znaków o zerowej długości.Wszystkie SQL Server-deskryptora określonej wartości pole tylko do odczytu.

Jak pobrać atrybutów z SQLColAttribute, pola deskryptora sprawozdanie, które atrybuty poziom wierszy (na przykład SQL_CA_SS_COMPUTE_ID) są raportowane dla wszystkich kolumn zestaw wyników.

Parametry oródwierszową i SQLGetDescField

SQLGetDescField można uzyskać wartości dla rozszerzonych atrybutów tabela-wycenione parametrów i tabela-wycenione parametr kolumny.Więcej informacji o tabela-wyceniane parametrów, zobacz Parametry oródwierszową (ODBC).

Obsługa SQLGetDescField Enhanced Data i czas funkcje

Aby uzyskać informacje o dostępnych z nową datą pól deskryptora /czas typów, zobacz Parametr i wynik metadanych.

Aby uzyskać więcej informacji, zobacz Data/Godzina ulepszenia (ODBC).

Obsługa dużych CLR UDTs SQLGetDescField

SQLGetDescField obsługuje duże CLR zdefiniowane przez użytkownika typów (UDTs).Aby uzyskać więcej informacji, zobacz Duże CLR typów zdefiniowanych przez użytkownika (ODBC).

SQLGetDescField obsługa rozrzedzania kolumn

SQLGetDescFieldmożna zbadać nowe pole IRD SQL_CA_SS_IS_COLUMN_SET, aby określić, czy kolumna jest column_set kolumny.

Aby uzyskać więcej informacji, zobacz Obsługa rozrzedzenia kolumn (ODBC).

Przykład

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