В той степени, в которой это возможно в «ANSI» (ISO) SQL, вам нужно перейти к представлениям информационной схемы, чтобы получить информацию. Официально это ИСО / МЭК 9075-11: 2003 (или 2008). См. Также статью в Википедии SQL , где говорится:
Часть SQL / Schemata, или Схемы информации и определения, определена в ISO / IEC 9075, Часть 11. SQL / Schemata определяет Информационную схему и Схему определения, предоставляя общий набор инструментов для самостоятельного создания баз данных и объектов SQL. -describing. Эти инструменты включают идентификатор объекта SQL, ограничения структуры и целостности, спецификации безопасности и авторизации, функции и пакеты ISO / IEC 9075, поддержку функций, предоставляемых реализациями СУБД на основе SQL, информацию о реализации СУБД на основе SQL и элементы определения размеров, а также значения, поддерживаемые реализациями СУБД. Эта часть стандарта содержит как обязательные, так и дополнительные функции.
Взять «обязательные функции» с щепоткой соли - я подозреваю, что большинство СУБД не реализуют даже обязательные части.
В противном случае ответ очень специфичен для СУБД. Информация доступна - детали отличаются от СУБД к СУБД, вот и все.
Раздел 5.61 SQL / Schemata (версия 2003) определяет «представление ТАБЛИЦ». Похоже, он не включает в себя количество строк, как и другие виды, которые я вижу. Таким образом, кажется, что комментарий Бо Сименсена является правильным; нет простого способа найти число строк переносимым образом.
CREATE VIEW TABLES AS
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME,
TABLE_TYPE, SELF_REFERENCING_COLUMN_NAME, REFERENCE_GENERATION,
USER_DEFINED_TYPE_CATALOG, USER_DEFINED_TYPE_SCHEMA,
USER_DEFINED_TYPE_NAME, IS_INSERTABLE_INTO, IS_TYPED,
COMMIT_ACTION
FROM DEFINITION_SCHEMA.TABLES
WHERE ( TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME ) IN
( SELECT TP.TABLE_CATALOG, TP.TABLE_SCHEMA, TP.TABLE_NAME
FROM DEFINITION_SCHEMA.TABLE_PRIVILEGES AS TP
WHERE ( TP.GRANTEE IN ( 'PUBLIC', CURRENT_USER )
OR GRANTEE IN ( SELECT ROLE_NAMEFROM ENABLED_ROLES ) )
UNION
SELECT CP.TABLE_CATALOG, CP.TABLE_SCHEMA, CP.TABLE_NAME
FROM DEFINITION_SCHEMA.COLUMN_PRIVILEGES AS CP
WHERE ( CP.GRANTEE IN ( 'PUBLIC', CURRENT_USER )
OR CP.GRANTEE IN ( SELECT ROLE_NAME
FROM ENABLED_ROLES ) ) )
AND TABLE_CATALOG = ( SELECT CATALOG_NAME
FROM INFORMATION_SCHEMA_CATALOG_NAME );
Как видно из списка выбора, количество строк не включено.
Поэтому я думаю, что не существует переносимого способа определения количества строк и имен таблиц.