如何编写SQLite查询获取所有表的表名、字段数及行数?
SQLite 表信息统计查询实现
最终实现方案
你可以通过两步完成符合要求的查询:
步骤1:生成带UNION ALL的最终查询语句
执行以下SQL得到可直接运行的目标查询语句:
SELECT GROUP_CONCAT( 'SELECT ''' || name || ''' AS table_name, ' || '(SELECT COUNT(*) FROM pragma_table_info(''' || name || ''')) AS column_count, ' || 'COUNT(*) AS row_count FROM ' || quote(name), ' UNION ALL ' ) AS target_sql FROM sqlite_schema WHERE type = 'table' AND name NOT LIKE 'sqlite_%';
步骤2:执行生成的查询语句
将步骤1查询得到的target_sql字段内容复制出来直接执行,即可得到符合要求的结果,输出字段说明如下:
table_name:字符串格式的表名column_count:整数类型的表字段数量row_count:整数类型的表行数,通过COUNT(*)统计得到
逻辑说明
- 系统表
sqlite_schema过滤type='table'条件得到所有用户自定义表,排除sqlite_前缀的系统内置表 - 内置函数
pragma_table_info(表名)会返回指定表的所有字段元数据,用COUNT(*)统计即可得到字段总数 - 通过
GROUP_CONCAT函数以UNION ALL为分隔符,拼接每个表的独立查询逻辑,完全符合复合操作符的使用要求
注意:SQLite本身不支持直接动态执行SQL语句,因此需要先生成查询语句再手动执行,如果你是在应用代码中调用,可以将步骤1的结果取出后直接作为查询语句执行。
内容的提问来源于stack exchange,提问作者giovanni sergi
相关产品推荐
相关产品推荐

