Het hangt ervan af of het standaardpad is ingesteld voor gegevens- en logbestanden of niet.
Als het pad expliciet is ingesteld bij Properties
=> Database Settings
=> Database default locations
vervolgens slaat de SQL-server het op in Software\Microsoft\MSSQLServer\MSSQLServer
in DefaultData
en DefaultLog
waarden.
Als deze parameters echter niet expliciet zijn ingesteld, gebruikt de SQL-server de gegevens- en logpaden van de hoofddatabase.
Bellow is het script dat beide gevallen omvat. Dit is een vereenvoudigde versie van de query die SQL Management Studio uitvoert.
Merk ook op dat ik xp_instance_regread
. gebruik in plaats van xp_regread
, dus dit script werkt voor elke instantie, standaard of benoemd.
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
U kunt hetzelfde resultaat bereiken door SMO te gebruiken. Bellow is een C#-voorbeeld, maar u kunt elke andere .NET-taal of PowerShell gebruiken.
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;
}
Het is zoveel eenvoudiger in SQL Server 2012 en hoger, ervan uitgaande dat u standaardpaden hebt ingesteld (wat waarschijnlijk altijd het juiste is om te doen):
select
InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')