SQL从任意数量的相同表中选择记录

时间:2010-02-14 23:11:19

标签: sql database dynamic-sql

我正在尝试使用具有相同结构和相关名称的多个表来查询数据库(SQLServer),即

[TABLE 01 $TRANSACTIONS]
[TABLE 02 $TRANSACTIONS]
...
[TABLE (n) $TRANSACTIONS]

我有一个查询一次在一个表上返回所需的记录,并可以使用

手动选择多个表
SELECT {QUERY01} FROM [TABLE 01 $TRANSACTIONS]
UNION
SELECT {QUERY02} FROM [TABLE 02 $TRANSACTIONS]
...
SELECT {QUERY(n)} FROM [TABLE (n) $TRANSACTIONS]

我替换所需表名的通用查询大约有200行,涉及ROWNUMBER()/ PARTITION BY函数,多个连接到相关表和一些排序。

随着时间的推移,将添加新表并且 n 将更改。

有人可以建议一种方法从所有 n 表中选择记录的UNION,以获取 n 的任意值吗?

注意:可以使用sysobjects表上的查询轻松获取 n 表的列表

SELECT Name FROM sysobjects
WHERE Type = 'U'
AND Name LIKE '%$TRANSACTIONS'
ORDER BY Name

2 个答案:

答案 0 :(得分:1)

AFAIK,您最好的选择是使用sysobjects查询定期生成新的视图定义。

你可能能够创建一个DDL触发器,当你的表发生变化时,它会运行程序重新生成这个视图 - 我真的不知道。像这样的DB设计是一个火车残骸。

答案 1 :(得分:0)

您可以浏览sysobjects查询并构造sql语句。然后,您可以调用sp_executesql来运行它。根据经验,我可以告诉你,这些都是A $$中的一个难点。我还希望这个解决方案能够随着任何供应商的升级而崩溃。祝你好运。