如何知道独立于实例名称、集群名称或默认实例的目录?
**更新:** 非常重要,您不能使用 nvarchar(MAX) 读取注册表数据,只能使用有值的 nvarchar(例如 nvarchar(4000))。我不知道这一点,所以我的读取总是失败……
**更新 2:** 在集群上,默认数据目录位于
软件\Microsoft\MSSQLServer\安装程序
SQLDataRoot 键上的注册表。
**更新 3:**对于远程服务器使用链接服务器!
这是最终的脚本:
declare @datadir nvarchar(4000)
,@logdir nvarchar(4000);
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer'
, N'DefaultData'
, @datadir output;
IF @datadir IS NULL
BEGIN
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\Setup'
, N'SQLDataRoot'
, @datadir output;
END
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer'
, N'DefaultLog'
, @logdir output;
SELECT @datadir as Data, ISNULL(@logdir,@datadir) as Log;
答案1
您将在注册表中找到可以从 TSQL 中读取的默认数据和日志目录xp_instance_regread存储过程。请参阅此帖子了解详细信息。
http://tenbulls.co.uk/2010/07/08/how-to-set-and-manage-your-sql-server-default-paths/