获取SQL Server默认数据文件存放路径

本来以为挺简单的东西,还是费了点劲

问题:用sql语句获取mdf默认存放路径

这个路径没有放在sql server里面,而是在注册表里,路径是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer,其中MSSQL10_50.MSSQLSERVER是sql server 2008的默认instance name,参考http://msdn.microsoft.com/en-us/library/ms143547.aspx

sql server里面可以用xp_instance_regread读取注册表内容,问题就出在这个上面了,直接看解法,

declare @SmoDefaultFile nvarchar(1000)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\MSSQLServer', N'DefaultData', @SmoDefaultFile OUTPUT
select @SmoDefaultFile
set @SmoDefaultFile=null
exec master.dbo.xp_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQLServer', N'DefaultData', @SmoDefaultFile OUTPUT
select @SmoDefaultFile

两种方案的答案是相同的(第二种可能在不同的配置下会有问题)。

弄巧成拙,把第二个用法的参数用到了第一个上,搞好就才弄明白怎么回事。最后还是伟大的stack overlfow告诉我,xp_instance_regread会自动把路径转换成当成使用的instance对应的路径,而xp_regread就是个呆瓜,实打实的货。

posted @ 2012-03-07 19:19  KymoWang  阅读(6471)  评论(2编辑  收藏  举报