Share via


SQLGetDescField

SQL ServerYerel istemci odbc sürücüsü, sürücüye özgü tanımlayıcısı alanları uygulama satır tanımlayıcısı (IRD) yalnızca sunar. IRD içindeki SQL Servertanımlayıcısı alanları başvurulan sürücüye özgü sütun öznitelikleri ile. Kullanılabilir sürücüye özgü tanımlayıcısı alanları tam listesi hakkında daha fazla bilgi için bkz: SQLColAttribute.

Sütun tanımlayıcı dize içeren tanımlayıcısı alanları genellikle sıfır uzunluklu dizeleri vardır. Tüm SQL Server-belirli tanımlayıcısı alanın değerleri okunur.

Gibi özellikleri ile adresinden alındı SQLColAttribute, satır düzeyi niteliklerini (sözgelimi, SQL_CA_SS_COMPUTE_ID) rapor tanımlayıcısı alanları sonuç kümesindeki tüm sütunlar için bildirilir.

SQLGetDescField ve tablo Valued Parametreler

SQLGetDescFieldTablo değerli parametreleri ve tablo değerli parametresi sütunları genişletilmiş özniteliklerinin değerleri almak için kullanılır. Tablo değerli parametreleri hakkında daha fazla bilgi için bkz: Tablo Valued Parametreler (odbc).

Gelişmiş tarih ve saat özellikleri için SQLGetDescField desteği

Yeni Tarih/saat türleri ile kullanılabilir tanımlayıcısı alanları hakkında daha fazla bilgi için bkz: Parametre ve sonucu meta veri.

Daha fazla bilgi için, bkz. Tarih/Saat (odbc) geliştirmeleri.

Yılında başlayan SQL Server 2012, SQLGetDescFieldgeri SQL_C_SS_TIME2(için timetürleri) veya SQL_C_SS_TIMESTAMPOFFSET(için datetimeoffset) yerine SQL_C_BINARY, uygulama odbc 3.8 kullanıyorsa.

Büyük clr UDTs SQLGetDescField destek

SQLGetDescField büyük clr kullanıcı tanımlı türler (UDTs) destekler. Daha fazla bilgi için, bkz. Büyük clr kullanıcı tanımlı türler (odbc).

Seyrek sütunlar için SQLGetDescField desteği

SQLGetDescFieldyeni bir sütun olup olmadığını belirlemek için SQL_CA_SS_IS_COLUMN_SET IRD alanı sorgulamak için kullanılan bir column_setsütun.

Daha fazla bilgi için, bkz. Seyrek sütunlar destek (odbc).

Örnek

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

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

Ayrıca bkz.

Kavramlar

odbc API uygulama ayrıntıları

Diğer Kaynaklar

SQLGetDescField işlev