Как узнать каталоги независимо от имени экземпляра, имени кластера или экземпляра по умолчанию?
** ОБНОВЛЕНИЕ: ** Очень важно, что вы не можете читать данные реестра с помощью nvarchar (MAX) только со значением nvarchar, например, nvarchar (4000). Я не знал этого, поэтому мои чтения всегда терпели неудачу ...
** UPDATE2: ** В кластерах каталог данных по умолчанию расположен на
Программное обеспечение \ Microsoft \ MSSQLServer \ Setup
реестр в ключе SQLDataRoot.
** UPDATE3: ** Для удаленного сервера используйте связанный сервер!
Это последний сценарий:
declare @datadir nvarchar(4000)
,@logdir nvarchar(4000);
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer'
, N'DefaultData'
, @datadir output;
IF @datadir IS NULL
BEGIN
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\Setup'
, N'SQLDataRoot'
, @datadir output;
END
EXEC master.dbo.xp_instance_regread
N'HKEY_LOCAL_MACHINE'
, N'Software\Microsoft\MSSQLServer\MSSQLServer'
, N'DefaultLog'
, @logdir output;
SELECT @datadir as Data, ISNULL(@logdir,@datadir) as Log;
Вы найдете каталоги данных и журналов по умолчанию в реестре, которые можно прочитать из TSQL. xp_instance_regread хранимая процедура. Пожалуйста, прочтите этот пост для получения полной информации.
http://tenbulls.co.uk/2010/07/08/how-to-set-and-manage-your-sql-server-default-paths/