查找数据库默认位置

Im8*_*m88 1 sql-server sql-server-2008-r2 restore

我正在创建一个脚本来将数据库从备份文件恢复到实例的默认位置,该位置远离系统数据库安装文件夹。

目前,我正在使用查找默认DATA位置

 SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf', LOWER(physical_name)) - 1)
    FROM master.sys.master_files
    WHERE database_id = 1 AND file_id = 1
Run Code Online (Sandbox Code Playgroud)

和默认LOG位置

 SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'mastlog.ldf', LOWER(physical_name)) - 1)
    FROM master.sys.master_files
    WHERE database_id = 1
        AND file_id = 2
    )
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以在查询的帮助下找到数据库默认位置?

谢谢你的时间。

RLF*_*RLF 5

大多数 SQL Server 被配置为非系统数据库存在于系统数据库之外。这就是默认路径的通常含义。

您可以在以下位置查找一些代码以找到它:

http://www.codeproject.com/Articles/684020/Checking-MS-SQL-Server-database-files-default-path

此外,Alex Aza 在 StackOverflow 上发表了一篇受欢迎的文章。关键是从存储它们的注册表项中获取数据。这是 Alex 较长脚本中的一个片段:

declare @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
   N'Software\Microsoft\MSSQLServer\MSSQLServer', 
   N'DefaultData', @DefaultData output

declare @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE',
   N'Software\Microsoft\MSSQLServer\MSSQLServer', 
   N'DefaultLog', @DefaultLog output
Run Code Online (Sandbox Code Playgroud)