如何找出哪些表在SQL Server中的文件中有数据?

时间:2009-07-10 12:29:24

标签: sql-server sql-server-2005

我想在SQL Server(2005)中删除一个现在所谓的冗余文件,但是当我尝试删除它时,我被告知文件不是空的。有没有人知道找出这个文件中还有哪些数据的方法,这样我就可以做任何我需要做的改变让我放弃它?

1 个答案:

答案 0 :(得分:4)

假设你移动了表等,你可能需要运行:

DBCC SHRINKFILE (MyLogicalFile, EMPTYFILE) --EMPTYFILE is the important bit!!

请参阅DBCC SHRINKFILE

要检查(这是我使用的使用脚本的cut'n'paste):

SELECT
    ds.[name] AS LogicalFileName,
    OBJECT_NAME(p.object_id) AS Thing,
    SUM(au.total_pages) / 128.0 AS UsedMB,
    df.size / 128 AS FileSizeMB,
    100.0 * SUM(au.total_pages) / df.size AS PercentUsed
FROM
    sys.database_files df
    JOIN
    sys.data_spaces ds ON df.data_space_id = ds.data_space_id 
    JOIN
    sys.allocation_units au ON ds.data_space_id = au.data_space_id 
    JOIN 
    sys.partitions p ON au.container_id = p.hobt_id
WHERE
    OBJECTPROPERTYEX(p.object_id, 'IsMSShipped') = 0
GROUP BY
    ds.[name], OBJECT_NAME(p.object_id), df.size
ORDER BY
    ds.[name]