SQLGetDescField
Драйвер ODBC для собственного клиента SQL Server предоставляет специфические для драйвера поля дескриптора только для дескриптора строки реализации (IRD). В IRD ссылки на поля дескриптора SQL Server указываются через специфические для драйвера атрибуты столбца. Дополнительные сведения о полном списке доступных специфических для драйвера полей дескриптора см. в разделе SQLColAttribute.
Поля дескриптора, содержащие строки идентификатора столбца, часто являются строками нулевой длины. Все специфические для SQL Server значения поля дескриптора доступны только для чтения.
Как атрибуты, полученные с помощью SQLColAttribute, поля дескриптора, которые сообщают низкоуровневые атрибуты (такие как SQL_CA_SS_COMPUTE_ID) сообщаются для всех столбцов в результирующем наборе.
SQLGetDescField и возвращающие табличные значения параметры
Функция SQLGetDescField позволяет получить значения для расширенных атрибутов возвращающих табличное значение параметров и содержащих их столбцов. Дополнительные сведения о возвращающих табличное значение параметрах см. в разделе Возвращающие табличное значение параметры (ODBC).
Поддержка SQLGetDescField для усовершенствованных функций даты-времени
Дополнительные сведения о полях дескриптора, доступных с новыми типами даты-времени см. в разделе Метаданные параметров и результатов.
Дополнительные сведения см. в разделе Улучшенная обработка даты и времени (ODBC).
Поддержка SQLGetDescField для больших определяемых пользователем типов данных CLR
SQLGetDescField поддерживает большие определяемые пользователем типы (UDT) данных CLR. Дополнительные сведения см. в разделе Определяемые пользователем типы данных больших значений CLR (ODBC).
Поддержка SQLGetDescField Support для разреженных столбцов
SQLGetDescField можно использовать для запроса к новому IRD-полю SQL_CA_SS_IS_COLUMN_SET, чтобы определить, является ли столбец столбцом column_set.
Дополнительные сведения см. в разделе Поддержка разреженных столбцов (ODBC).
Примеры
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); }
См. также