Nó phụ thuộc vào việc đường dẫn mặc định có được đặt cho dữ liệu và tệp nhật ký hay không.
Nếu đường dẫn được đặt rõ ràng tại Properties
=> Database Settings
=> Database default locations
thì máy chủ SQL lưu trữ nó tại Software\Microsoft\MSSQLServer\MSSQLServer
trong DefaultData
và DefaultLog
giá trị.
Tuy nhiên, nếu các tham số này không được đặt rõ ràng, máy chủ SQL sẽ sử dụng các đường dẫn Dữ liệu và Nhật ký của cơ sở dữ liệu chính.
Dưới đây là kịch bản bao gồm cả hai trường hợp. Đây là phiên bản đơn giản hóa của truy vấn SQL Management Studio chạy.
Ngoài ra, lưu ý rằng tôi sử dụng xp_instance_regread
thay vì xp_regread
, vì vậy tập lệnh này sẽ hoạt động cho mọi trường hợp, mặc định hoặc được đặt tên.
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
declare @DefaultBackup nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @DefaultBackup output
declare @MasterData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg0', @MasterData output
select @MasterData=substring(@MasterData, 3, 255)
select @MasterData=substring(@MasterData, 1, len(@MasterData) - charindex('\', reverse(@MasterData)))
declare @MasterLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg2', @MasterLog output
select @MasterLog=substring(@MasterLog, 3, 255)
select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) - charindex('\', reverse(@MasterLog)))
select
isnull(@DefaultData, @MasterData) DefaultData,
isnull(@DefaultLog, @MasterLog) DefaultLog,
isnull(@DefaultBackup, @MasterLog) DefaultBackup
Bạn có thể đạt được kết quả tương tự bằng cách sử dụng SMO. Dưới đây là mẫu C #, nhưng bạn có thể sử dụng bất kỳ ngôn ngữ .NET hoặc PowerShell nào khác.
using (var connection = new SqlConnection("Data Source=.;Integrated Security=SSPI"))
{
var serverConnection = new ServerConnection(connection);
var server = new Server(serverConnection);
var defaultDataPath = string.IsNullOrEmpty(server.Settings.DefaultFile) ? server.MasterDBPath : server.Settings.DefaultFile;
var defaultLogPath = string.IsNullOrEmpty(server.Settings.DefaultLog) ? server.MasterDBLogPath : server.Settings.DefaultLog;
}
Nó đơn giản hơn rất nhiều trong SQL Server 2012 trở lên, giả sử bạn đã đặt đường dẫn mặc định (có lẽ luôn là điều đúng đắn cần làm):
select
InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')