我有一个恢复到我的服务器的数据库的备份,它有超过100个表,但我知道只有少数几个有记录。是否可以编写一个查询来选择包含记录的表列表?这是SQL Server 2008 R2。
答案 0 :(得分:2)
放手一搏:
SELECT so.name,
ps.row_count
FROM sys.dm_db_partition_stats ps
INNER JOIN sys.objects so
ON ps.object_id = so.object_id
WHERE so.type = 'u'
AND row_count > 0
ORDER BY so.name
可能值得注意的是,行数不能保证100%的准确性(我相信这个信息仅作为查询优化器的指导),如果你需要它准确的话就像运行一个实际的表一样使用COUNT
进行扫描。
但是,由于您只想检查是否有任何行,这应该足够了。
答案 1 :(得分:1)
试试这个:
CREATE TABLE #tab_info
(
[name] NVARCHAR(128),
[rows] CHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18)
)
INSERT #tab_info EXEC sp_msForEachTable 'EXEC sp_spaceused ''?'''
SELECT *
FROM #tab_info
WHERE [rows] > 0