我目前正在处理与当年相关的数据集。与每年相关的数据存放在单独的表格中。查询数据时,使用UNION ALL查询完成。
不幸的是,过去提供的数据集与当前年份的模式不共享,一些字段已添加,一些已退役,另一些已重命名。我无法控制这一点。
在这种情况下,当架构不同时,如何在这些表中执行UNION ALL查询?差异不是很大,但它们的偏差足以引起问题。
有什么建议吗?
我是否将所有内容合并到一个大表中,包括跨越所有年份的所有字段,然后在它们出现时添加新的字段?或者,我是否继续将这些表分开?
答案 0 :(得分:2)
嗯,首先,不要尝试使用SELECT *来UNION(实际上UNION ALL可能更合适)。
你可以:
例如:
DECLARE @a TABLE(d DATE, c INT, x FLOAT);
DECLARE @b TABLE(d DATETIME, c VARCHAR(32));
DECLARE @c TABLE(d DATE, x INT, y INT);
SELECT d, c = CONVERT(VARCHAR(32), c), x = CONVERT(INT, x) FROM @a
UNION ALL
SELECT CONVERT(DATE, d), c, x = NULL FROM @b
UNION ALL
SELECT d, c = 'not supplied', x FROM @c;