Itu tergantung pada apakah jalur default diatur untuk data dan file log atau tidak.
Jika jalur diatur secara eksplisit di Properties
=> Database Settings
=> Database default locations
kemudian SQL server menyimpannya di Software\Microsoft\MSSQLServer\MSSQLServer
di DefaultData
dan DefaultLog
nilai.
Namun, jika parameter ini tidak disetel secara eksplisit, server SQL menggunakan jalur Data dan Log dari database master.
Di bawah ini adalah skrip yang mencakup kedua kasus tersebut. Ini adalah versi sederhana dari kueri yang dijalankan SQL Management Studio.
Juga, perhatikan bahwa saya menggunakan xp_instance_regread
bukannya xp_regread
, jadi skrip ini akan berfungsi untuk semua instance, default atau bernama.
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
Anda dapat mencapai hasil yang sama dengan menggunakan SMO. Di bawah ini adalah contoh C#, tetapi Anda dapat menggunakan bahasa .NET atau PowerShell lainnya.
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;
}
Ini jauh lebih sederhana di SQL Server 2012 dan di atasnya, dengan asumsi Anda memiliki jalur default yang ditetapkan (yang mungkin selalu merupakan hal yang benar untuk dilakukan):
select
InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')