我正在创建一个脚本以将数据库从备份文件恢复到实例的默认位置,该位置远离系统数据库安装文件夹。
目前,我正在使用查找默认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
和默认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
)
有没有其他方法可以在查询的帮助下找到数据库默认位置?
谢谢你的时间。
大多数 SQL Server 配置为使非系统数据库与系统数据库分开存在。这就是默认路径的通常含义。
您可以在以下位置查找一些代码以找到它:
http://www.codeproject.com/Articles/684020/Checking-MS-SQL-Server-database-files-default-path
此外,Alex Aza 在 StackOverflow 上提供了一篇受欢迎的帖子。关键是从存储它们的注册表项中获取数据。这是 Alex 较长脚本的一个片段:
您不会希望使用此方法,因为主数据库文件的位置不一定表示默认位置。例如,我将我的主数据库文件指定在单独的驱动器上,而所有用户数据库都默认为另一个。
您可以使用 SQLandMe中的以下查询来查找默认数据库位置:
以及以下日志位置:
您当前的方法将不起作用,因为它假定它
master
被放置在默认数据/日志路径中,它在任何时候都没有被移动,并且从那时起默认值没有改变。注册表方法有效,但它们有点乏味(特别是如果您不使用特定于实例的 XP 并且必须自己提供注册表路径),谁知道这是否是始终存储位置的位置。
另一种方法 - 假设模型没有荒谬的文件大小设置 - 只是临时创建一个数据库并查看 SQL Server 默认放置它的位置。
(这也假设您的默认路径实际上并不包含该字符串
!#floobernuggets
,并且您没有任何奇怪的警报或任何因实际创建数据库而触发的东西。)当然,正如 Kin在 SQL Server 2012 中指出的那样,您将能够使用
SERVERPROPERTY
它。