【问题标题】:Merging an unknown number of result sets in sql server在sql server中合并未知数量的结果集
【发布时间】:2013-11-22 16:20:50
【问题描述】:

将未知数量的结果集合并为一个可排序的分页结果集的最佳策略是什么?

背景,我有一个相当复杂的查询,用户可以构建 N 次,然后一次提交所有这些查询。 N 个查询都返回相同格式的结果集,但 WHERE 子句完全不同。

我可以使用 SPROC 根据输入生成动态 sql 语句,或者单独执行每个查询并在代码中处理它,但必须有更好的方法来做到这一点。这个问题有最优解吗?

【问题讨论】:

    标签: sql-server stored-procedures union temp-tables


    【解决方案1】:

    只要查询都返回相同格式的结果,您可以将它们合并在一起并使用 order by 对结果进行排序

    select col1, col2, col3 from tablea where ...
     union
    select  col1, col2, col3 from tablea where ...
     order by col1, col2
    

    如果您想知道哪个查询返回了结果,则需要添加一个额外的列来指示该查询。

    根据生成的 N 个查询的大小,总联合查询的大小也可能存在问题。当我尝试以这种方式组合许多查询并最终执行单独的数据库调用并将结果合并到 java 代码中时,我遇到了 JDBC 限制查询大小的问题。

    【讨论】:

    • 您是否建议只动态构建语句,因为 N 会根据用户请求的结果集数量而变化?
    • 如果查询是基于用户输入的,我看不出您可以选择。如果您可以提前枚举所有可能的组合,然后在运行时选择正确的查询,那么您似乎可以在没有动态生成的查询的情况下做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 2013-05-06
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多