Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQLStatistics получает список статистики о одной таблице и индексах, связанных с таблицей. Драйвер возвращает сведения в виде результирующих наборов.
Соответствие
Представлена версия: соответствие стандартам ODBC 1.0: ISO 92
Синтаксис
SQLRETURN SQLStatistics(
SQLHSTMT StatementHandle ,
SQLCHAR * CatalogName ,
SQLSMALLINT NameLength1 ,
SQLCHAR * SchemaName ,
SQLSMALLINT NameLength2 ,
SQLCHAR * TableName ,
SQLSMALLINT NameLength3 ,
SQLUSMALLINT Unique ,
SQLUSMALLINT Reserved);
Arguments
ОператорHandle
[Входные данные] Дескриптор инструкции.
Имя каталога
[Входные данные] Имя каталога. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют каталогов.
Имя каталога не может содержать шаблон поиска строк.
Если для атрибута SQL_ATTR_METADATA_ID инструкции задано SQL_TRUEзначение, CatalogName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, CatalogName является обычным аргументом, он обрабатывается буквально, и его дело является значительным. Дополнительные сведения см. в разделе "Аргументы" в функциях каталога.
NameLength1
[Входные данные] Длина символов catalogName.
SchemaName
[Входные данные] Имя схемы. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, пустая строка ("") указывает на те таблицы, которые не имеют схем.
SchemaName не может содержать шаблон поиска строк.
Если для атрибута SQL_ATTR_METADATA_ID инструкции задано SQL_TRUEзначение, SchemaName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSEтак, SchemaName является обычным аргументом, он обрабатывается буквально, и его дело является значительным.
NameLength2
[Входные данные] Длина в символах SchemaName.
TableName
[Входные данные] Имя таблицы. Этот аргумент не может быть указателем null. Имя таблицы не может содержать шаблон поиска строк.
SQL_ATTR_METADATA_ID Если для атрибута инструкции задано SQL_TRUEзначение, TableName обрабатывается как идентификатор, и его регистр не имеет значения. Если это SQL_FALSE, TableName является обычным аргументом, он обрабатывается буквально, и его дело является значительным.
NameLength3
[Входные данные] Длина в символах TableName.
Уникальный
[Входные данные] Тип индекса: SQL_INDEX_UNIQUE или SQL_INDEX_ALL.
Reserved
[Входные данные] Указывает важность CARDINALITY и PAGES столбцы в результирующем наборе. Следующие параметры влияют только на возврат CARDINALITY и PAGES только столбцы; сведения о индексе возвращаются, даже если CARDINALITY и PAGES не возвращаются.
SQL_ENSURE запрашивает, что драйвер безусловно извлекает статистику. (Драйверы, которые соответствуют только стандарту Open Group и не поддерживают расширения ODBC, не смогут поддерживать SQL_ENSURE.)
SQL_QUICK запрашивает, что драйвер извлекает CARDINALITY и PAGES только в том случае, если он будет легко доступен с сервера. В этом случае драйвер не гарантирует, что значения являются текущими. (Приложения, записываемые в стандарт Open Group, всегда получают SQL_QUICK поведение от драйверов, совместимых с ODBC 3.x.).
Возвраты
SQL_SUCCESS, , SQL_SUCCESS_WITH_INFO, SQL_ERRORSQL_STILL_EXECUTINGили SQL_INVALID_HANDLE.
Diagnostics
При SQLStatistics возврате SQL_ERROR или SQL_SUCCESS_WITH_INFOсвязанном SQLSTATE значении можно получить путем вызова SQLGetDiagRechandleType и SQL_HANDLE_STMTдескриптораоператораHandle. В следующей таблице перечислены SQLSTATE значения, которые обычно возвращаются SQLStatistics и объясняются каждым из них в контексте этой функции. Нотация (DM) предшествует описаниям каждого SQLSTATE , возвращенного диспетчером драйверов. Возвращаемый код, связанный с каждым SQLSTATE значением, если SQL_ERRORне указано иное.
| SQLSTATE | Ошибка | Description |
|---|---|---|
01000 |
Общее предупреждение | Информационное сообщение для конкретного драйвера. (Функция возвращает SQL_SUCCESS_WITH_INFO.) |
08S01 |
Сбой связи | Связь между драйвером и источником данных, к которому был подключен драйвер, произошел сбой до завершения обработки функции. |
24000 |
Недопустимое состояние курсора | Курсор был открыт на ОператорHandle и SQLFetchSQLFetchScroll был вызван. Эта ошибка возвращается диспетчером драйверов, если SQLFetch или он не вернулся и SQLFetchScroll возвращается SQL_NO_DATA драйвером, если SQLFetch он SQLFetchScroll или вернулся SQL_NO_DATA.Курсор был открыт на ОператорHandle, но SQLFetchSQLFetchScroll не был вызван. |
40001 |
Сбой сериализации | Транзакция была откатена из-за взаимоблокировки ресурсов с другой транзакцией. |
40003 |
Неизвестное завершение инструкции | Связанное подключение завершилось сбоем во время выполнения этой функции, и состояние транзакции невозможно определить. |
HY000 |
Общая ошибка | Произошла ошибка, для которой не было конкретного SQLSTATE и для которого не определена конкретная SQLSTATE реализация. Сообщение об ошибке, возвращаемое SQLGetDiagRec в буфере *MessageText , описывает ошибку и ее причину. |
HY001 |
Ошибка выделения памяти | Драйверу не удалось выделить память, необходимую для поддержки выполнения или завершения функции. |
HY008 |
Операция отменена | Асинхронная обработка была включена для ОператораHandle. Функция была вызвана и до завершения выполнения SQLCancel или SQLCancelHandle была вызвана в StatementHandle, а затем функция была вызвана еще раз на ОператорHandle.Функция была вызвана и до завершения выполнения SQLCancel или SQLCancelHandle была вызвана в StatementHandle из другого потока в многопотоковом приложении. |
HY009 |
Недопустимое использование указателя NULL | Аргумент TableName был пустым указателем. Для SQL_ATTR_METADATA_ID атрибута инструкции задано SQL_TRUEзначение , аргумент CatalogName был пустым указателем, а SQL_CATALOG_NAMEInfoType возвращает поддерживаемые имена каталогов.(DM) Атрибут SQL_ATTR_METADATA_ID инструкции был задан SQL_TRUE, и аргумент SchemaName был пустым указателем. |
HY010 |
Ошибка последовательности функций | (DM) Асинхронно выполняющаяся функция была вызвана для дескриптора соединения, связанного с ОператоромHandle. Эта асинхронная функция по-прежнему выполнялась при вызове SQLStatistics функции.(DM) SQLExecuteSQLExecDirectили SQLMoreResults был вызван для оператора StatementHandle и возвращенSQL_PARAM_DATA_AVAILABLE. Эта функция была вызвана до получения данных для всех потоковых параметров.(DM) асинхронно выполняющаяся функция (не эта) была вызвана для StatementHandle и по-прежнему выполнялась при вызове этой функции. (DM) SQLExecute, SQLExecDirectSQLBulkOperationsили SQLSetPos был вызван для ОператораHandle и возвращенSQL_NEED_DATA. Эта функция была вызвана до отправки данных для всех параметров выполнения или столбцов. |
HY013 |
Ошибка управления памятью | Не удалось обработать вызов функции, так как к базовым объектам памяти не удалось получить доступ, возможно, из-за низкой памяти. |
HY090 |
Недопустимая длина строки или буфера | (DM) Значение одного из аргументов длины имени было меньше 0, но не равно SQL_NTS.Значение одного из аргументов длины имени превысило максимальное значение длины соответствующего имени. |
HY100 |
Тип параметра Uniqueness вне диапазона | (DM) Указано недопустимое уникальное значение. |
HY101 |
Тип параметра точности вне диапазона | (DM) Указано недопустимое зарезервированное значение. |
HY117 |
Подключение приостановлено из-за неизвестного состояния транзакции. Разрешены только функции отключения и только для чтения. | (DM) Дополнительные сведения о приостановленном состоянии см. в статье SQLEndTran Function. |
HYC00 |
Необязательный компонент не реализован | Был указан каталог, а драйвер или источник данных не поддерживает каталоги. Указана схема, а драйвер или источник данных не поддерживает схемы. Сочетание текущих параметров атрибутов SQL_ATTR_CONCURRENCY инструкции SQL_ATTR_CURSOR_TYPE не поддерживается драйвером или источником данных.Для SQL_ATTR_USE_BOOKMARKS атрибута инструкции задано SQL_UB_VARIABLEзначение , и SQL_ATTR_CURSOR_TYPE атрибут инструкции был задан для типа курсора, для которого драйвер не поддерживает закладки. |
HYT00 |
Истекло время ожидания | Срок ожидания запроса истек до того, как источник данных вернул запрошенный результирующий набор. Период времени ожидания задается через SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
HYT01 |
Время ожидания для подключения истекло | Срок ожидания подключения истек до того, как источник данных ответил на запрос. Период времени ожидания подключения задается через SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 |
Драйвер не поддерживает эту функцию | (DM) Драйвер, связанный с оператором StatementHandle , не поддерживает функцию. |
IM017 |
Опрос отключен в асинхронном режиме уведомлений | При использовании модели уведомлений опрос отключается. |
IM018 |
SQLCompleteAsync не был вызван для выполнения предыдущей асинхронной операции в этом дескрипторе. |
Если предыдущий вызов функции возвращает SQL_STILL_EXECUTING дескриптор и включен режим уведомлений, SQLCompleteAsync необходимо вызвать дескриптор после обработки и завершить операцию. |
Comments
SQLStatisticsвозвращает сведения о одной таблице в виде стандартного результирующий набор, упорядоченный по NON_UNIQUE, , TYPEиINDEX_NAMEINDEX_QUALIFIERORDINAL_POSITION. Результирующий набор объединяет статистические данные (в CARDINALITY столбцах PAGES результирующего набора) для таблицы с информацией о каждом индексе. Сведения об использовании этих сведений см. в разделе "Использование данных каталога".
Чтобы определить фактическую длину столбцов , и столбцовTABLE_CAT, приложение может вызываться SQLGetInfo с SQL_MAX_TABLE_NAME_LENSQL_MAX_SCHEMA_NAME_LENSQL_MAX_CATALOG_NAME_LENпомощью параметров , и SQL_MAX_COLUMN_NAME_LEN параметров.COLUMN_NAMETABLE_NAMETABLE_SCHEM
Замечание
Дополнительные сведения об общем использовании, аргументах и возвращаемых данных функций каталога ODBC см. в разделе "Функции каталога".
Следующие столбцы были переименованы для ODBC 3.x. Изменения имени столбца не влияют на обратную совместимость, так как приложения привязываются по номеру столбца.
| Столбец ODBC 2.0 | Столбец ODBC 3.x |
|---|---|
TABLE_QUALIFIER |
TABLE_CAT |
TABLE_OWNER |
TABLE_SCHEM |
SEQ_IN_INDEX |
ORDINAL_POSITION |
COLLATION |
ASC_OR_DESC |
В следующей таблице перечислены столбцы в результирующем наборе. Дополнительные столбцы за пределами столбца 13 (FILTER_CONDITION) можно определить драйвером. Приложение должно получить доступ к столбцам для конкретного драйвера, отсчитывая от конца результирующего набора вместо указания явной порядковой позиции. Дополнительные сведения см. в разделе "Данные, возвращаемые функциями каталога".
| Имя столбца | Номер столбца | Тип данных | Comments |
|---|---|---|---|
TABLE_CAT (ODBC 1.0) |
1 | varchar | Имя каталога таблицы, к которой применяется статистика или индекс; NULL Значение , если применимо к источнику данных. Если драйвер поддерживает каталоги для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют каталогов. |
TABLE_SCHEM (ODBC 1.0) |
2 | varchar | Имя схемы таблицы, к которой применяется статистика или индекс; NULL Значение , если применимо к источнику данных. Если драйвер поддерживает схемы для некоторых таблиц, но не для других, например, когда драйвер извлекает данные из разных СУБД, он возвращает пустую строку ("") для тех таблиц, которые не имеют схем. |
TABLE_NAME (ODBC 1.0) |
3 |
varchar не NULL |
Имя таблицы, к которой применяется статистика или индекс. |
NON_UNIQUE (ODBC 1.0) |
4 | smallint | Указывает, не допускает ли индекс повторяющиеся значения:SQL_TRUE Значение индекса, если значения индекса могут быть неуниканы.SQL_FALSE Значение ,если значения индекса должны быть уникальными.NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT. |
INDEX_QUALIFIER (ODBC 1.0) |
5 | varchar | Идентификатор, используемый для определения имени индекса, выполняющего действие DROP INDEX; NULL возвращается, если квалификатор индекса не поддерживается источником данных или TYPE имеет значение SQL_TABLE_STAT. Если значение, отличное от NULL, возвращается в этом столбце, оно должно использоваться для определения имени индекса в DROP INDEX инструкции; в противном случае TABLE_SCHEM следует использовать для определения имени индекса. |
INDEX_NAME (ODBC 1.0) |
6 | varchar | Имя индекса; NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT. |
TYPE (ODBC 1.0) |
7 |
smallint не NULL |
Тип возвращаемых сведений:SQL_TABLE_STAT указывает статистику таблицы (в столбце CARDINALITY или PAGES столбце).SQL_INDEX_BTREE указывает индекс B-Tree.SQL_INDEX_CLUSTERED указывает кластеризованный индекс.SQL_INDEX_CONTENT указывает индекс содержимого.SQL_INDEX_HASHED указывает хэшированные индексы.SQL_INDEX_OTHER указывает другой тип индекса. |
ORDINAL_POSITION (ODBC 1.0) |
8 | smallint | Порядковый номер столбца в индексе (начиная с 1); NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT. |
COLUMN_NAME (ODBC 1.0) |
9 | varchar | Имя столбца. Если столбец основан на выражении, например SALARY + BENEFITS, возвращается выражение; если выражение не удается определить, возвращается пустая строка.
NULL возвращается, если TYPE имеет значение SQL_TABLE_STAT. |
ASC_OR_DESC (ODBC 1.0) |
10 | char(1) | Последовательность сортировки для столбца: "A" для возрастания; "D" для убывания; NULL возвращается, если последовательность сортировки столбцов не поддерживается источником данных или имеет TYPE значение SQL_TABLE_STAT. |
CARDINALITY (ODBC 1.0) |
11 | integer | Кратность таблицы или индекса; число строк в таблице, если TYPE имеет SQL_TABLE_STATзначение; число уникальных значений в индексе, если это не SQL_TABLE_STATтак; NULL возвращается, если TYPE значение недоступно из источника данных. |
PAGES (ODBC 1.0) |
12 | integer | Количество страниц, используемых для хранения индекса или таблицы; число страниц таблицы, если TYPE имеет SQL_TABLE_STATзначение; число страниц для индекса, если TYPE это не SQL_TABLE_STATтак; NULL возвращается, если значение недоступно из источника данных или если оно не применимо к источнику данных. |
FILTER_CONDITION (ODBC 2.0) |
13 | varchar | Если индекс является отфильтрованным индексом, это условие фильтра, например SALARY > 30000, если условие фильтра не может быть определено, это пустая строка.NULL Если индекс не является отфильтрованным индексом, он не может быть определен, является ли индекс отфильтрованным или TYPE является SQL_TABLE_STAT. |
Если строка в результирующем наборе соответствует таблице, драйвер устанавливает и задает TYPESQL_TABLE_STATNON_UNIQUE, , INDEX_QUALIFIER, INDEX_NAMEASC_OR_DESCORDINAL_POSITIONCOLUMN_NAMENULLа также . Если CARDINALITY или PAGES они недоступны из источника данных, драйвер устанавливает для них значение NULL.
Пример кода
Пример кода аналогичной функции см. в статье SQLColumns Function.
Связанные функции
| Сведения | Article |
|---|---|
| Привязка буфера к столбцу в результирующем наборе | Функция SQLBindCol |
| Отмена обработки инструкций | Функция SQLCancel |
| Получение одной строки или блока данных в направлении только для пересылки. | Функция SQLFetch |
| Получение блока данных или прокрутка результирующий набор | Функция SQLFetchScroll |
| Возврат столбцов внешних ключей | Функция SQLForeignKeys |
| Возврат столбцов первичного ключа | Функция SQLPrimaryKeys |