我的数据库中有几个表,我构建了一个查询来组合它们的数据并将这些数据存储在一个临时表中,我将其用作其他查询的输入。但由于每天都会向te数据库添加一个新的交付,我只想更改一个变量,而不是通过我的代码并调整每个FROM子句。
是否可以在FROM子句中使用concat函数,以便它根据输入变量选择所需的表?像:
DECLARE @colTableUP TABLE (
x varchar(50)
,y varchar(50)
,z varchar(50)
)
DECLARE @version AS string
SET @version = '20160620'
INSERT INTO @colTableUP
SELECT x, y, z
FROM CONCAT('[dbo].[Table1_', @version ,']')
UNION ALL
SELECT x, y, z
FROM CONCAT('[dbo].[Table2_', @version ,']')
UNION ALL
etc...
由于我没有让代码正常工作,我想知道是否可以在FROM中使用CONCAT,或者是否有其他最佳实践来实现所需的结果而不是手动调整所有结果?
答案 0 :(得分:3)
评论太长了。
首先,让多个表具有相同的列是可疑的。最好将所有数据加载到单个表中,使用"版本"作为列名。
如果数据是作为单独的表创建的,那么您可以修改表创建作业将数据加载到" master"表。如果你真的想要花哨,你可以使用DDL触发器,所以当创建表时它会自动加载。
包含所有行的主表是一个选项。另一个是在问题中执行union all
查询的视图。为此,您可以删除并重新创建视图,或使用alter view
。
答案 1 :(得分:1)
这可以通过以下动态SQL实现:
data