Sql server 如何获取陷入恢复的MS SQL数据库的文件路径

Sql server 如何获取陷入恢复的MS SQL数据库的文件路径,sql-server,restore,recovery,Sql Server,Restore,Recovery,我以备份“替换”的形式向数据库分发更新,但用户可以将其安装到任何硬盘驱动器上的任何位置,这意味着在运行“移动还原”之前,我需要在其上执行“SP_HelpFile”。但是SP_帮助文件要求我首先“使用数据库”,如果它已经卡在失败的恢复中,我就不能这样做。如果我不能告诉它在哪里恢复,我甚至不能“带恢复”运行。有没有办法使用主数据库获取文件名?现在我唯一的解决方案是删除并重新安装,但我希望自动更新程序能够自己处理它 更新:服务器版本为2005&2008您应该能够在不使用数据库的情况下获取路径+文件名。

我以备份“替换”的形式向数据库分发更新,但用户可以将其安装到任何硬盘驱动器上的任何位置,这意味着在运行“移动还原”之前,我需要在其上执行“SP_HelpFile”。但是SP_帮助文件要求我首先“使用数据库”,如果它已经卡在失败的恢复中,我就不能这样做。如果我不能告诉它在哪里恢复,我甚至不能“带恢复”运行。有没有办法使用主数据库获取文件名?现在我唯一的解决方案是删除并重新安装,但我希望自动更新程序能够自己处理它


更新:服务器版本为2005&2008

您应该能够在不使用数据库的情况下获取路径+文件名。sp_helpfile使用本地sys.sysfiles,但现在至少可以使用目录视图sysaltfiles,出于向后兼容性原因,它仍然在master中。。。这是假设SQL Server 2005+(请始终指定您正在使用的SQL Server版本):


在SQL 2005+中,可以使用系统视图sys.master_文件

select name, physical_name
from sys.master_files
where db_id = db_id('your_database')

在SQL Server 2008中,应按如下方式使用:

SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE dbid = DB_ID('db_name');

我不喜欢使用不推荐的东西,但它让我找到了master.sys.master_文件,所以请指向您。啊,是的,忘记了它的替代品。对于使用镜像的系统,这个问题总是会出现。
SELECT filename 
    FROM master.sys.sysaltfiles
    WHERE dbid = DB_ID('db_name');