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

l--*_*''' 16 sql sql-server-2008

SMSS中是否有办法检测表是否有任何记录?我需要获取有记录的表列表.也许有一个sql语句可以做到这一点?

mar*_*c_s 25

试试这个 - 给你表名和行数:

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
Run Code Online (Sandbox Code Playgroud)

它在单个输出中显示所有表及其行数.


Mar*_*ith 16

由于您的问题专门提到SSMS,您也可以右键单击对象资源管理器中的数据库,然后从快捷菜单中执行

Reports -> Standard Reports -> Disc Usage By Table
Run Code Online (Sandbox Code Playgroud)

截图


Noe*_*ams 13

一个更简单的语法:

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
Run Code Online (Sandbox Code Playgroud)