SQLGetDescField

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformní systém (PDW)

Nativní klientský ODBC ovladač SQL Server zpřístupňuje pouze specifická deskriptorová pole pro implementační řádky (IRD). V rámci IRD jsou pole SQL Server descriptorů odkazována pomocí specifických sloupcových atributů ovladače. Pro informace o úplném seznamu dostupných specifických deskriptorových polí pro ovladače viz SQLColAttribute.

Deskriptorová pole obsahující řetězce sloupců jsou často řetězce nulové délky. Všechny hodnoty deskriptorů specifické pro SQL Server jsou pouze pro čtení.

Stejně jako atributy získané pomocí SQLColAttribute jsou pro všechny sloupce ve výsledné sadě hlášeny deskorová pole, která hlásí atributy na úrovni řádku (například SQL_CA_SS_COMPUTE_ID).

SQLGetDescField a Table-Valued parametry

SQLGetDescField lze použít k získání hodnot pro rozšířené atributy tabulkových parametrů a tabulkových parametrů. Pro více informací o tabulkových parametrech viz Table-Valued Parametry (ODBC).

Podpora SQLGetDescField pro vylepšené funkce data a času

Pro informace o deskriptorových polích dostupných s novými typy dat/času viz metadata parametrů a výsledků.

Další informace naleznete v tématu vylepšení data a času (ODBC).

Od SQL Server 2012 (11.x) může SQLGetDescField vracet SQL_C_SS_TIME2 (pro typy času) nebo SQL_C_SS_TIMESTAMPOFFSET (pro datetimeoffset) místo SQL_C_BINARY, pokud vaše aplikace používá ODBC 3.8.

SQLGetDescField podpora pro velké CLR UDT

SQLGetDescField podporuje velké uživatelsky definované typy CLR (UDT). Další informace najdete v tématuVelké typy User-Defined CLR (ODBC).

SQLGetDescField Support for Sparse Columns

SQLGetDescField lze použít k dotazování nového SQL_CA_SS_IS_COLUMN_SET pole IRD k určení, zda je sloupec column_set .

Pro více informací viz Sparse Columns Support (ODBC).

Example

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