यह इस बात पर निर्भर करता है कि डेटा और लॉग फ़ाइलों के लिए डिफ़ॉल्ट पथ सेट है या नहीं।
यदि पथ स्पष्ट रूप से Properties
. पर सेट किया गया है => Database Settings
=> Database default locations
तब SQL सर्वर इसे Software\Microsoft\MSSQLServer\MSSQLServer
पर स्टोर करता है DefaultData
. में और DefaultLog
मान।
हालांकि, अगर ये पैरामीटर स्पष्ट रूप से सेट नहीं हैं, तो SQL सर्वर मास्टर डेटाबेस के डेटा और लॉग पथ का उपयोग करता है।
बोलो वह स्क्रिप्ट है जो दोनों मामलों को कवर करती है। यह क्वेरी का सरलीकृत संस्करण है जिसे SQL प्रबंधन स्टूडियो चलाता है।
साथ ही, ध्यान दें कि मैं xp_instance_regread
. का उपयोग करता हूं xp_regread
. के बजाय , इसलिए यह स्क्रिप्ट डिफ़ॉल्ट या नामित किसी भी उदाहरण के लिए काम करेगी।
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
आप एसएमओ का उपयोग करके एक ही परिणाम प्राप्त कर सकते हैं। Bellow C# नमूना है, लेकिन आप किसी अन्य .NET भाषा या पावरशेल का उपयोग कर सकते हैं।
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;
}
SQL सर्वर 2012 और इसके बाद के संस्करण में यह बहुत आसान है, यह मानते हुए कि आपके पास डिफ़ॉल्ट पथ सेट हैं (जो शायद हमेशा एक सही काम है):
select
InstanceDefaultDataPath = serverproperty('InstanceDefaultDataPath'),
InstanceDefaultLogPath = serverproperty('InstanceDefaultLogPath')