如何在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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...