SQLGetDescField

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server Native Client ODBC sürücüsü, yalnızca uygulama satır tanımlayıcısı (IRD) için sürücüye özgü tanımlayıcı alanlarını sunar. IRD içinde, SQL Server tanımlayıcı alanları sürücüye özgü sütun öznitelikleri aracılığıyla referans verilir. Mevcut sürücüye özgü tanımlayıcı alanlarının tam listesi hakkında bilgi için SQLColAttribute'a bakınız.

Sütun tanımlayıcı dizelerini içeren tanımlayıcı alanları genellikle sıfır uzunluklu dizelerdir. Tüm SQL Server'a özgü tanımlayıcı alan değerleri yalnızca okunabilir.

SQLColAttribute ile alınan özellikler gibi, satır seviyesindeki öznitelikleri bildiren tanımlayıcı alanları (örneğin SQL_CA_SS_COMPUTE_ID) sonuç kümesindeki tüm sütunlar için raporlanır.

SQLGetDescField ve Table-Valued Parametreleri

SQLGetDescField, tablo değerli parametrelerin ve tablo değerli parametre sütunlarının genişletilmiş nitelikleri için değerler elde etmek için kullanılabilir. Tablo değerli parametreler hakkında daha fazla bilgi için bkz. Table-Valued Parametreler (ODBC).

Gelişmiş Tarih ve Saat Özellikleri için SQLGetDescField Desteği

Yeni tarih/saat tipleriyle mevcut tanımlayıcı alanları hakkında bilgi için Parametre ve Sonuç Metadata'ya bakınız.

Daha fazla bilgi için bkz. Tarih ve Saat Geliştirmeleri (ODBC).

SQL Server 2012'den (11.x) itibaren, uygulamanız ODBC 3.8 kullanıyorsa, SQLGetDescField SQL_C_SS_TIME2 (zaman türleri için) veya SQL_C_SS_TIMESTAMPOFFSET (datetimeoffset için) yerine SQL_C_BINARY döndürebilir.

Büyük CLR UDT'ler için SQLGetDescField desteği

SQLGetDescField , büyük CLR kullanıcı tanımlı türleri (UDT'leri) destekler. Daha fazla bilgi için bkz. Büyük CLR User-Defined Türleri (ODBC).

SQLGetDescField Support for Sparse Columns

SQLGetDescField, yeni IRD alanını sorgulamak SQL_CA_SS_IS_COLUMN_SET bir sütunun column_set sütun olup olmadığını belirlemek için kullanılabilir.

Daha fazla bilgi için Sparse Columns Support (ODBC) bölümüne bakınız.

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