Der SQL Server besitzt in seiner Konfiguration Standard-Verzeichnisse für die Daten-Dateien, Log-Dateien und auch für Backups. Werden diese in einem Skript benötigt, können diese folgendermaßen ausgelesen werden:
-- SQL Data Root
DECLARE @SQLDataRoot nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\Setup'
,N'SQLDataRoot',@SQLDataRoot OUTPUT
SELECT @SQLDataRoot SQLDataRoot
-- Standard-Datenverzeichnis
DECLARE @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer'
,N'DefaultData',@DefaultData OUTPUT
select @DefaultData DefaultData
-- Standard-Logfile-Verzeichnis
DECLARE @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer',N'DefaultLog'
,@DefaultLog OUTPUT
select @DefaultLog DefaultLog
-- Standard Backup-Verzeichnis
DECLARE @DefaultBackup nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE'
,N'Software\Microsoft\MSSQLServer\MSSQLServer',N'BackupDirectory'
,@DefaultBackup OUTPUT
select @DefaultBackup DefaultBackup
Sollte eines der Verzeichnisse nicht explizit gesetzt sein (sondern in der Standardeinstellung, wie bei Installation belassen), dann wird folgende Meldung zurückgegeben:
RegQueryValueEx() returned error 2, 'Das System kann die angegebene Datei nicht finden.'
Msg 22001, Level 1, State 1
Die Standardwerte für nicht explizit festgelegte Verzeichnisse sind:
- DefaultData => SQLDataRoot + “\DATA”
- DefaultLog => SQLDataRoot + “\LOG”
- DefaultBackup => SQLDataRoot + “\Backup”
Nicht nur auslesen, auch Setzen kann man diese Werte per Skript (außer das SQLDataRoot):
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', REG_SZ, N'C:\data'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', REG_SZ, N'C:\Log'
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', REG_SZ, N'C:\Backup'