[英]SQL Server: What's the limit on number of UNIONs?
我想知道我可以發送到 SQL 服務器的 UNION 的 SELECT 語句的數量是否有限制? 我可能在一個 SQL 語句中完成了多達 36 個,所以它變得相當長,字符明智。 (此外,每個 SELECT 語句本身都有些復雜,其中包含 CASE WHEN 語句。)
“在 Transact-SQL 語句中可以出現任意數量的 UNION 運算符”
同樣來自MSDN “SQL 服務器的最大容量規格”(2008 年):
批量大小 (1) 65,536 * 網絡數據包大小
包含 SQL 語句的字符串的長度(批量大小) (1) 65,536 * 網絡數據包大小
(1) Network Packet Size 是表格數據 stream (TDS) 數據包的大小,用於在應用程序和關系數據庫引擎之間進行通信。 默認數據包大小為 4 KB,由網絡數據包大小配置選項控制。
在我看來,這意味着使用默認值時需要 268,435,456 個字節。 請說您的查詢比這更短。
死靈法,因為我現在知道現實生活中的答案。
從技術上講,就像 Neil Moss 所說,> 2.68 億字節(ASCII 字符),或 > 1.34 億 UTF-16 字符。
但是,有“每個 SELECT 語句 256 個表”的限制。
雖然您可以在WITH UNION STATEMENTS查詢中使用超過 256 個表,但這樣的查詢不能用作視圖、表值 function 或 SELECT 語句的子查詢。
此外,如果您直接使用這樣的查詢,您可能會在大約 1'300-1'500 SELECTs 處達到查詢優化器的堆棧空間限制。
我知道,因為感謝一個偉大的(警告 - 諷刺)OCP(原始代碼“程序員”),我們有這樣一個 f*ed 模式,我實際上遇到了 256 和 1'300-1'500 限制.
(每個 object 類型一個表,以防有人想知道;每個表具有完全相同的列模式(但不是名稱)-而不是具有對象類型的引用表......)
根據這篇帖子,介於 8000 到 16000 之間,用於他的特定查詢。 可能主要受 SQL 服務器可用資源的支配。
對於不需要這么多聯合的替代方法,您可能需要針對特定情況提出另一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.