0

我正在尝试使用具有相同结构和相关名称的多个表来查询数据库(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表中为任意n值选择 UNION 记录的方法?

注意:n个表的列表可以通过对sysobjects表的查询轻松获得

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

2 回答 2

1

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

您也许可以创建一个 DDL 触发器,该触发器运行该过程以在您的表更改时重新生成此视图——我真的不知道。像这样的 DB 设计简直就是一场灾难。

于 2010-02-14T23:24:51.510 回答
0

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

于 2010-02-15T19:25:49.720 回答