选择SQL Server中的所有空表

Dav*_*hel 26 t-sql sql-server

如何获取我的sql-server数据库中没有任何记录的表列表?

mar*_*c_s 38

在SQL Server 2005及更高版本上,您可以使用以下内容:

;WITH TableRows AS
(
   SELECT 
      SUM(row_count) AS [RowCount], 
      OBJECT_NAME(OBJECT_ID) AS TableName
   FROM 
      sys.dm_db_partition_stats
   WHERE 
      index_id = 0 OR index_id = 1
   GROUP BY 
      OBJECT_ID
)
SELECT *
FROM TableRows
WHERE [RowCount] = 0
Run Code Online (Sandbox Code Playgroud)

CTE中的内部选择(公用表表达式)计算每个表的行数,并按table(OBJECT_ID)对它们进行分组,然后CTE的外部SELECT只捕获总行数相等的行(表)为零.

  • @mortb:发布了更新/改编版本,从结果中排除了所有 Microsoft 发布的(系统)表 (2认同)

Rik*_*tel 25

要获取空表的列表,我们可以使用下面的tsql -

EXEC sp_MSforeachtable 'IF NOT EXISTS (SELECT 1 FROM ?) PRINT ''?'' '
Run Code Online (Sandbox Code Playgroud)

并且,要获取至少有一行数据的表列表,我们可以使用下面的tsql -

EXEC sp_MSforeachtable 'IF EXISTS (SELECT 1 FROM ?) PRINT ''?'' '
Run Code Online (Sandbox Code Playgroud)

注意:表格列表仅包括"用户表",即不包括"系统表".


小智 6

select a.rows as Rowcnt,
   b.name as Tbl_Name 
from sys.partitions a
join sys.tables b
   on a.object_id=b.object_id
where b.type='u' 
   and a.rows = 0
Run Code Online (Sandbox Code Playgroud)