DBCC SHRINKFILE 适用于 file_id 但不适用于逻辑名称

Dot*_*per 9 sql-server-2008 sql-server shrink system-tables

我正在尝试缩小数据库文件,但遇到了错误。

使用sys.database_files作品中的 file_id ,但使用逻辑文件名会产生错误。

两个语句中的逻辑文件名相同,所以这不是问题。此外,正在连接的数据库是相同的。以下按预期工作:

declare @fileId as int = (select file_id from sys.database_files where name = 'XY')
DBCC SHRINKFILE (@fileId, 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

然而以下...

DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

...将导致错误 8985:

消息 8985,级别 16,状态 1,第 1 行
无法在 sys.database_files 中找到数据库“<我的数据库>”的文件“XY”。该文件要么不存在,要么已被删除。

Cou*_*000 6

修改了我的答案,测试没有显示为它不起作用的正当理由。

需要检查的几件事

  1. 文件名中是否有前导或尾随空格?
  2. 您最近是否有机会升级到 SP3?

尝试将恢复模式从完整模式切换到简单模式,然后再切换回完整模式。更新到 SP3 时有一个明显的错误。更改恢复模式将重置日志序列号,无论出于何种原因,至少是暂时清除问题。

关于此的social.msdn 对话