如何在FROM db调用中使用临时变量?

问题描述

如何将声明的临时变量放入FROM和JOIN数据库命令中?

我们的SIS保留每个学期的GPA,但将班级(以及许多其他课程)作为时间点,没有历史记录,因此我可以查询过去的DB来收集某些时间段的信息。这意味着我必须单击并键入很多单调的字符串,所以我想为这些调用声明一个变量。

我正在查询一个术语数据库获取某些信息,并在子查询中加入前一个术语数据库获取一个信息,所以我也想为整个数据库调用声明USE语句

我目前有,但这只是最近一次失败的尝试:

DECLARE @term AS VARCHAR(7)
SET @term = 'FA2019';

SELECT GPA blah blah
FROM db AS a
JOIN ( SELECT CLASS_LEVEL blah blah
       FROM FROM [snapshotdb_+@term].[dbo].[sub1]
            JOIN [snapshotdb_+@term].[dbo].[subjoin]
      ) b
where a.STTR_TERM  IN  ( @term  )

解决方法

使用动态sql能够动态地为您使用from和inner子句中的差异数据库。

PS:您还必须为JOIN设置ON子句

示例:

DECLARE @term AS VARCHAR(7)
SET @term = 'FA2019';


declare @sql nvarchar(max) = N'
SELECT GPA blah blah
FROM db AS a
JOIN ( SELECT CLASS_LEVEL blah blah
       FROM ' + quotename('snapshotdb_' + @TERM) + '.[dbo].[sub1]
            JOIN ' + quotename('snapshotdb_' + @TERM) + '.[dbo].[subjoin]
      ) b
where a.STTR_TERM  IN  ( ' + replace(@term,'''','''''') + '  )

';

exec (@sql);