如何通过循环统计以G结尾的表的记录数并按表名命名结果
高效统计所有以G结尾的表的记录数并生成对应结果表
以MySQL为例的实现方案
- 筛选目标表列表
先通过系统视图获取所有名称以G结尾的表:
SELECT table_name FROM information_schema.tables WHERE table_schema = '你的数据库名' AND table_name LIKE '%G';
- 编写存储过程批量处理
创建存储过程循环遍历目标表,自动生成以output_原表名命名的统计结果表:
DELIMITER // CREATE PROCEDURE CountTablesEndingWithG() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE tbl_name VARCHAR(255); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = '你的数据库名' AND table_name LIKE '%G'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO tbl_name; IF done THEN LEAVE read_loop; END IF; -- 动态生成创建结果表的SQL SET @sql = CONCAT( 'CREATE TABLE IF NOT EXISTS output_', tbl_name, ' AS SELECT COUNT(*) AS record_count FROM ', tbl_name ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END LOOP; CLOSE cur; END // DELIMITER ; -- 执行存储过程 CALL CountTablesEndingWithG();
关键注意事项
- 替换语句中的
你的数据库名为实际使用的数据库名称 - 若需要覆盖已存在的结果表,将
CREATE TABLE IF NOT EXISTS改为CREATE TABLE(会删除原有表并重建) - 确保执行脚本的用户拥有查询
information_schema、创建表以及查询目标表的权限
SQL Server环境下的替代脚本
如果使用SQL Server,可使用以下游标脚本实现相同功能:
DECLARE @tbl_name NVARCHAR(255) DECLARE cur CURSOR FOR SELECT name FROM sys.tables WHERE name LIKE '%G' OPEN cur FETCH NEXT FROM cur INTO @tbl_name WHILE @@FETCH_STATUS = 0 BEGIN DECLARE @sql NVARCHAR(MAX) SET @sql = N'CREATE TABLE output_' + @tbl_name + N' (record_count BIGINT); INSERT INTO output_' + @tbl_name + N' SELECT COUNT(*) FROM ' + @tbl_name EXEC sp_executesql @sql FETCH NEXT FROM cur INTO @tbl_name END CLOSE cur DEALLOCATE cur
内容的提问来源于stack exchange,提问作者KC0_0
相关产品推荐
相关产品推荐

