首页 > 解决方案 > select from @variable 如何在 from 之后使用变量

问题描述

我有一个查询应该从位于 2 个不同服务器的多个数据库中获取结果:

以下是我的查询:

 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 是基于数据库名称的服务器名称的声明变量,感谢您的帮助。

标签: sql-servertsqlselectdynamic-sql

解决方案


推荐阅读