已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
6天前关闭。
这篇文章是4天前编辑并提交审查的。
Improve this question
我有一个数据库,我每天都会创建一个新表,并在其中填充数据(我知道这并不理想,但我无法更改)。每个表的格式都是“TESTdata_xxxxx_DB”,其中xxxxx每天递增1。
我需要一种简单的方法来选择这些表中的许多表(即,跨许多日期)的前1000行(满足特定条件的行)。例如,我需要跨表TESTdata_45800_DB、TESTdata_45801、...、TESTdata_45850_DB查询。
我已经尝试了下面的查询,但是很明显添加“to”不起作用,并且用逗号分隔它们也不能按照我想要的方式合并它们:
SELECT TOP 1000
[ItemIndex],
[Data1],
[Data2],
[Data3]
FROM
[TESTDB1].[dbo].[TESTdata_45800_DB] (to...) [TESTdata_45850_DB]
WHERE
Data1 LIKE 'High' OR Data1 LIKE 'Medium'
ORDER BY
Data1
;
任何帮助都将不胜感激。
2条答案
按热度按时间tf7tbtn21#
使用动态SQL的存储过程是解决这类问题的一种很好的方法。在内存中创建一个数字表,用它来创建UNIONE超表,然后执行动态SQL以获得所需的结果:
一旦运行并存在了它,就可以用你喜欢的起始和结束数字来调用它:
最后,正如其他评论者所表达的那样,我建议不要每天都创建一个新表,如果你可以帮助它的话。将每天的数据插入到一个正在运行的表中是更自然、更好的做法。
qyswt5oh2#
如果你想要一个表的联合,意味着所有表的所有行都被转储到一个行集中,那么就使用SQL UNION。
顺便说一句,虽然UNION工作得很好,但它的性能并不好,而且根据我的经验,从长远来看,做一堆联合可能会变得很难支持。在某个时候,您可能会考虑使用替代的数据架构,如具有多个分区的单个表,每天一个分区。