【SQL】统计所有表的行数

  • Post category:other

以下是统计所有表的行数的完整攻略,包括两个示例说明。

统计所有表的行数

在SQL中,我们可以使用以下步骤来统计所有表的行数。

步骤

  1. 查询所有表名:我们可以使用以下SQL语句查询所有表名:
    SELECT name FROM sys.tables;
  2. 构建动态SQL语句:在查询所有表名后,我们需要构建动态SQL语句,以便查询每个表的行数。例如,我们可以使用以下SQL语句构建动态SQL语句:
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables;
    这将返回一个包含每个表的动态SQL语句的结果集。
  3. 执行动态SQL语句:在构建动态SQL语句后,我们需要执行每个表的动态SQL语句,并将结果汇总。例如,我们可以使用以下SQL语句执行动态SQL语句并将结果汇总:
    DECLARE @sql_statement NVARCHAR(MAX);
    DECLARE @total_rows BIGINT = 0;
    DECLARE @table_rows BIGINT = 0;
    DECLARE @table_name NVARCHAR(MAX);
    DECLARE table_cursor CURSOR FOR
    SELECT sql_statement FROM (
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables
    ) AS sql_statements;
    OPEN table_cursor;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    EXEC sp_executesql @sql_statement, N'@table_rows BIGINT OUTPUT', @table_rows OUTPUT;
    SET @total_rows = @total_rows + @table_rows;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    END
    CLOSE table_cursor;
    DEALLOCATE table_cursor;
    SELECT @total_rows AS total_rows;

    这将返回所有表的行数总和。

示例说明

示例1:统计所有表的行数

假设我们有一个包含多个表的数据库,并且需要统计所有表的行数。以下是统计所有表的行数的步骤。

  1. 查询所有表名:我们可以使用以下SQL语句查询所有表名:
    SELECT name FROM sys.tables;
  2. 构建动态SQL语句:在查询所有表名后,我们需要构建动态SQL语句,以便查询每个表的行数。例如,我们可以使用以下SQL语句构建动态SQL语句:
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables;
    这将返回一个包含每个表的动态SQL语句的结果集。
  3. 执行动态SQL语句:在构建动态SQL语句后,我们需要执行每个表的动态SQL语句,并将结果汇总。例如,我们可以使用以下SQL语句执行动态SQL语句并将结果汇总:
    DECLARE @sql_statement NVARCHAR(MAX);
    DECLARE @total_rows BIGINT = 0;
    DECLARE @table_rows BIGINT = 0;
    DECLARE @table_name NVARCHAR(MAX);
    DECLARE table_cursor CURSOR FOR
    SELECT sql_statement FROM (
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables
    ) AS sql_statements;
    OPEN table_cursor;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    EXEC sp_executesql @sql_statement, N'@table_rows BIGINT OUTPUT', @table_rows OUTPUT;
    SET @total_rows = @total_rows + @table_rows;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    END
    CLOSE table_cursor;
    DEALLOCATE table_cursor;
    SELECT @total_rows AS total_rows;

    这将返回所有表的行数总和。

示例2:统计指定前缀的表的行数

假设我们有一个包含多个表的数据库,并且需要统计所有以“customer_”为前缀的表的行数。以下是统计指定前缀的表的行数的步骤。

  1. 查询所有表名:我们可以使用以下SQL语句查询所有以“customer_”为前缀的表名:
    SELECT name FROM sys.tables WHERE name LIKE 'customer_%';
  2. 构建动态SQL语句:在查询所有表名后,我们需要构建动态SQL语句,以便查询每个表的行数。例如,我们可以使用以下SQL语句构建动态SQL语句:
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables WHERE name LIKE 'customer_%';
    这将返回一个包含每个表的动态SQL语句的结果集。
  3. 执行动态SQL语句:在构建动态SQL语句后,我们需要执行每个表的动态SQL语句,并将结果汇总。例如,我们可以使用以下SQL语句执行动态SQL语句并将结果汇总:
    DECLARE @sql_statement NVARCHAR(MAX);
    DECLARE @total_rows BIGINT = 0;
    DECLARE @table_rows BIGINT = 0;
    DECLARE @table_name NVARCHAR(MAX);
    DECLARE table_cursor CURSOR FOR
    SELECT sql_statement FROM (
    SELECT 'SELECT COUNT(*) FROM ' + name AS sql_statement FROM sys.tables WHERE name LIKE 'customer_%'
    ) AS sql_statements;
    OPEN table_cursor;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    EXEC sp_executesql @sql_statement, N'@table_rows BIGINT OUTPUT', @table_rows OUTPUT;
    SET @total_rows = @total_rows + @table_rows;
    FETCH NEXT FROM table_cursor INTO @sql_statement;
    END
    CLOSE table_cursor;
    DEALLOCATE table_cursor;
    SELECT @total_rows AS total_rows;

    这将返回所有以“customer_”为前缀的表的行数总和。