小编典典

使用MOVE确定DB RESTORE的SQL数据路径

sql

我正在尝试编写一个脚本,该脚本可以自动还原数据库备份。我知道我可以使用以下RESTORE命令:

RESTORE DATABASE [DBRestoredName] 
FROM  DISK = N'C:\path\to\backup.bak' 
WITH  FILE = 1,  
MOVE N'DBNAME' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\DBNAME.mdf',  
MOVE N'DBNAME_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\DBNAME.ldf',  
NOUNLOAD

问题是我希望能够在运行时确定SQL Server的数据位置(即TO路径),以便将还原的数据库始终与该服务器上的其他数据库并排放置。

要还原的数据库在要还原到的服务器上将不存在,并且我需要MOVE语句,因为源服务器可能是SQL Server
2005,而目标服务器是2008,因此备份文件中包含的文件路径是不可取的。

那么,我可以通过哪些方式以编程方式确定SQL数据位置?


阅读 122

收藏
2021-04-22

共1个答案

小编典典

我发现的唯一可行的解​​决方案是从T-SQL代码检查注册表:

DECLARE @filepath NVARCHAR(260)

EXEC master.dbo.xp_instance_regread 
        N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', 
        N'DefaultData', 
        @filepath output, 'no_output'

SELECT @filepath as 'Your default data directory'

我可能已经发誓数据路径会存储在SERVERPROPERTY或动态管理视图(DMV)中的某个位置-但是没有运气......

更新 :正如@Mike所指出的那样-在SQL Server 2012
及更高版本中,该信息可以通过以下方式获得SERVERPROPERTY

SELECT 
    DefaultDataPath = SERVERPROPERTY('InstanceDefaultDataPath'),
    DefaultLogPath = SERVERPROPERTY('InstanceDefaultLogPath')
2021-04-22