У меня есть запрос, который должен получить результаты из нескольких баз данных, расположенных на 2 разных серверах:
- Я создал связанный сервер для подключения ко второму серверу.
- Я смогЧтобы зациклить базы данных, расположенные под одним сервером, моя проблема заключается в том, что я не могу получить второй сервер, на котором расположена другая база данных "NCHKS".
- Я попытался объявить переменную для имени сервера и вызвать ее после from in selectно я не смог разместить правильный синтаксис
Ниже приведен мой запрос:
declare @dbname varchar(max)
--select @dbname = '"NCHLB", "NCHDU", "NCHCY", "NCCH", "NCHOS", "NCHUK",
--"AFRNW" , "NCAFR", "NCTRK", "NCCPI", "NCIOL", "NCDLM", "NCHOL", "NCHCL",
--"NMISL", "NCHMP"'
select @dbname = '"NCHKS"'
declare @sql varchar(max)
declare @servername varchar(max)
set @servername = iif (@dbname = '"NCHKS"','[SERVER2]','[SERVER1]')
--select @servername
select @sql = isnull(@sql,'')
+ case when @sql is null then '' else ' union all ' end
+ 'SELECT ''' + db.name + ''' as [DB Name], [year1], [jrnentry]
FROM ' + @servername + '.' + db.name + '.dbo.PK_OPEN_AA_DIST A
CROSS JOIN ' + @servername + '.' + db.name + '.dbo.MC40000 AS mc
Union ALL
SELECT ''' + db.name + ''' as [DB Name], [year1], [jrnentry]
FROM ' + @servername + '.' + db.name + '.dbo.PK_HIST_AA_DIST
A CROSS JOIN ' + @servername + '.' + db.name + '.dbo.MC40000 AS mc'
from [SERVER2].Master.sys.databases db
where @dbname like '%"' + db.name + '"%'
select @sql = '
Select [DB Name], JRNENTRY
from (' + @sql + ') as AllData
order by YEAR1, JRNENTRY'
execute (@sql)
Я не могу заменить SERVER2 или SERVER1 в приведенном ниже синтаксисе. для переменной SERERNAME
from [SERVER2].Master.sys.databases db
она должна выглядеть примерно так:
from @servername.Master.sys.databases db
где @servername - объявленная переменная имени сервера, основанная на имени базы данных, оцените вашу помощь.