【问题标题】:How to find out the number of tables in a SQL database? [closed]如何找出 SQL 数据库中的表数? [关闭]
【发布时间】:2022-01-14 18:55:36
【问题描述】:

假设我们有一个数据库db,其中包含多个表t1,t2 and t3。 如何在无需手动计算的情况下找出特定数据库中的表数。

另外,是否可以在同一个查询中找出每个表中的行数?

【问题讨论】:

  • number of tables in one specific table
  • 您使用的是哪个 RDBMS?您已标记 3 个。
  • 您可以使用特定于产品的查询找到这两者。您无法编写一个适用于所有 3 种产品的查询
  • 从 INFORMATION_SCHEMA 查询此数据。

标签: mysql sql


【解决方案1】:

对于 SQL Server:

SELECT [schema]       = s.name, 
       [table]        = t.name, 
       NumberOfRows   = SUM(p.rows), 
       NumberOfTables = COUNT(*) OVER()
  FROM sys.schemas AS s
  INNER JOIN sys.tables AS t
    ON s.[schema_id] = t.[schema_id]
  INNER JOIN sys.partitions AS p
    ON t.[object_id] = p.[object_id]
  WHERE p.index_id IN (0,1)
  GROUP BY s.name, t.name
  ORDER BY s.name, t.name;

并针对任意数据库运行:

DECLARE @db sysname = N'db';

DECLARE @exec nvarchar(800),
        @sql  nvarchar(max) = N'
  SELECT [schema]       = s.name, 
         [table]        = t.name, 
         NumberOfRows   = SUM(p.rows), 
         NumberOfTables = COUNT(*) OVER()
    FROM sys.schemas AS s
    INNER JOIN sys.tables AS t
      ON s.[schema_id] = t.[schema_id]
    INNER JOIN sys.partitions AS p
      ON t.[object_id] = p.[object_id]
    WHERE p.index_id IN (0,1)
    GROUP BY s.name, t.name
    ORDER BY s.name, t.name;';

SET @exec = QUOTENAME(@db) + N'.sys.sp_executesql ';

EXEC @exec @sql;

对于 MySQL 和 MariaDB,您将不得不提出另一个问题,因为没有任何查询适用于所有三种产品。

【讨论】:

  • 很抱歉,我在打字时想到了什么。我的意思是多个数据库以及如何获取一个数据库中的表数。
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2011-09-19
相关资源
最近更新 更多