SQL Server 2008:我有1000个表,我需要知道哪些表有数据

SQL Server 2008:我有1000个表,我需要知道哪些表有数据,sql,sql-server-2008,Sql,Sql Server 2008,SMSS中是否有方法检测表是否有任何记录?我需要得到一个有记录的表的列表。也许有一个sql语句可以实现这一点?您可以使用以下存储过程: EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 这将为数据库中的每个表返回一个resultset(每个表都显示名称、行数以及其他信息) 以下是如何将它们放入表变量中,并按行数排序: DECLARE @TBL TABLE ( [name] nvarchar(500), [rows]

SMSS中是否有方法检测表是否有任何记录?我需要得到一个有记录的表的列表。也许有一个sql语句可以实现这一点?

您可以使用以下存储过程:

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
这将为数据库中的每个表返回一个resultset(每个表都显示名称、行数以及其他信息)

以下是如何将它们放入表变量中,并按行数排序:

DECLARE @TBL TABLE (
    [name] nvarchar(500),
    [rows] bigint,
    [reserved] nvarchar(500),
    [data] nvarchar(500),
    [index_size] nvarchar(500),
    [unused] nvarchar(500)
)

INSERT INTO @TBL
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

SELECT * FROM @TBL
ORDER BY [rows] DESC

尝试此操作-提供表名和行数:

SELECT 
    t.NAME AS TableName,
    SUM(p.rows) AS [RowCount]
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
WHERE   
    i.index_id <= 1
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 
ORDER BY 
    SUM(p.rows) DESC
选择
t、 名称为TableName,
总和(p.行)为[行计数]
从…起
系统表t
内连接
t.OBJECT\u ID=i.OBJECT\u ID上的sys.index i
内连接
i.object\u id=p.object\u id和i.index\u id=p.index\u id上的sys.p分区
哪里

i、 index_id当您的问题特别提到SSM时,您也可以在对象资源管理器中右键单击数据库,然后从快捷菜单中单击do

Reports -> Standard Reports -> Disc Usage By Table
更简单的语法:

SELECT  
    [Name] = o.name,
    [RowCount]= SUM(p.row_count)
FROM SYS.DM_DB_PARTITION_STATS p
INNER JOIN SYS.TABLES o ON p.[object_ID] = o.[object_id]
WHERE index_id <= 1 -- Heap or clustered index only
GROUP BY o.name
ORDER BY 2 desc
选择
[Name]=o.Name,
[行计数]=总和(p.行计数)
来自SYS.DM\u DB\u分区\u STATS\p
p.[object\u ID]=o.[object\u ID]上的内部联接SYS.o表

如果index_idHope,它可以帮助您-

SELECT name AS [TableList] FROM SYS.DM_DB_PARTITION_STATS s 
INNER JOIN sys.tables t ON t.[object_id] = s.[object_id]
WHERE row_count = 0
此代码显示不包含任何数据或行的表列表


谢谢

如何将其限制为特定DB?如果在同一个sql server上有多个具有相同表名的数据库,则行计数将相加。@OndraPeterka:否,这始终在一个数据库的上下文中执行,并且只显示这些表。这不会显示服务器所有数据库的所有表我正在使用它,它会从每个数据库返回数据