SQLGetDescField

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Driver ODBC Klien Asli SQL Server mengekspos bidang deskriptor khusus driver untuk deskriptor baris implementasi (IRD) saja. Dalam IRD, bidang deskriptor SQL Server dirujuk melalui atribut kolom khusus driver. Untuk informasi tentang daftar lengkap bidang deskriptor khusus driver yang tersedia, lihat SQLColAttribute.

Bidang deskriptor yang berisi string pengidentifikasi kolom sering kali merupakan string panjang nol. Semua nilai bidang deskriptor khusus SQL Server bersifat baca-saja.

Seperti atribut yang diambil dengan SQLColAttribute, bidang deskriptor yang melaporkan atribut tingkat baris (seperti SQL_CA_SS_COMPUTE_ID) dilaporkan untuk semua kolom dalam tataan hasil.

Parameter SQLGetDescField dan Table-Valued

SQLGetDescField dapat digunakan untuk mendapatkan nilai untuk atribut parameter bernilai tabel yang diperluas dan kolom parameter bernilai tabel. Untuk informasi selengkapnya tentang parameter bernilai tabel, lihat Parameter Bernilai Tabel (ODBC).

Dukungan SQLGetDescField untuk Fitur Tanggal dan Waktu yang Ditingkatkan

Untuk informasi tentang bidang deskriptor yang tersedia dengan jenis tanggal/waktu baru, lihat Parameter dan Metadata Hasil.

Untuk informasi selengkapnya, lihat Peningkatan Tanggal dan Waktu (ODBC).

Dimulai di SQL Server 2012 (11.x), SQLGetDescField dapat mengembalikan SQL_C_SS_TIME2 (untuk jenis waktu) atau SQL_C_SS_TIMESTAMPOFFSET (untuk datetimeoffset) alih-alih SQL_C_BINARY, jika aplikasi Anda menggunakan ODBC 3.8.

Dukungan SQLGetDescField untuk UDT CLR Besar

SQLGetDescField mendukung jenis yang ditentukan pengguna (UDT) CLR besar. Untuk informasi selengkapnya, lihat Jenis Yang Ditentukan Pengguna (ODBC) CLR Besar.

Dukungan SQLGetDescField untuk Kolom Jarang

SQLGetDescField dapat digunakan untuk mengkueri bidang IRD baru SQL_CA_SS_IS_COLUMN_SET untuk menentukan apakah kolom adalah kolom column_set .

Untuk informasi selengkapnya, lihat Dukungan Kolom Jarang (ODBC).

Contoh

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

Lihat Juga

Fungsi SQLGetDescField
Detail Implementasi ODBC API