2013-11-22 85 views
0

將未知數量的結果集合併爲單個可排序的分頁結果集的最佳策略是什麼?在sql server中合併未知數量的結果集

背景,我有一個相當複雜的查詢,用戶可以建立N次,然後一次提交所有這些查詢。 N個查詢都返回相同的格式化結果集,但具有非常不同的WHERE子句。

我可以使用SPROC根據其輸入生成動態sql語句,或者分別執行每個查詢並在代碼中處理它,但是有一個更好的方法可以實現它。有沒有解決這個問題的最佳解決方案?

回答

0

只要查詢都返回相同格式的結果,你可以聯合在一起,並使用ORDER BY來

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

如果你關心排序結果大約知道哪個查詢返回的結果,你會需要添加一個表示查詢的額外列。

根據生成的N個查詢的大小,還可能存在總聯合查詢的大小問題。在試圖以這種方式組合許多查詢並最終完成各個數據庫調用並將結果合併到java代碼中時,我碰到JDBC限制查詢大小的問題。

+0

您是否建議僅根據用戶請求的結果集數量更改N來動態構建語句? – user2532715

+0

如果查詢基於用戶輸入,我不會看到您有選擇。看起來你可以在沒有動態生成查詢的情況下做到這一點的唯一方法是,如果你能夠提前列舉所有可能的組合,然後在運行時選擇正確的查詢。 – GregA100k