sql-server - select from @variable 如何在 from 之后使用变量
问题描述
我有一个查询应该从位于 2 个不同服务器的多个数据库中获取结果:
- 我创建了一个链接服务器来连接到第二个服务器。
- 我能够循环位于一台服务器下的数据库,我的问题是我无法获得另一个数据库“NCHKS”所在的第二台服务器。
- 我试图为服务器名称声明一个变量并在 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 是基于数据库名称的服务器名称的声明变量,感谢您的帮助。
解决方案
推荐阅读
- assembly - 上下文中不允许使用内存操作数,将变量复制到数组时出现数组大小问题
- delphi - 如何更改组合框下拉列表的位置?
- google-cloud-platform - 来自 API 的谷歌云平台支持计划
- javascript - 如何使用 jQuery 启用和禁用文本框?
- django - 在单独的文件中组织 django 模型时导入错误
- android - 如何使用 Executor 启动新的 gms/firebase 任务?
- django - 循环进口动机
- javascript - 快速获取 URL 并删除某些对象
- php - 只有 1 个使用 php 进入 mysql 的多个 json 数组
- angular - Angular 6 ng build --prod 错误:未捕获(承诺):无法读取未定义的属性“调用”