本來以為挺簡單的東西,還是費了點勁
問題:用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就是個呆瓜,實打實的貨。