簡體   English   中英

SQL 服務器:UNION 的數量有什么限制?

[英]SQL Server: What's the limit on number of UNIONs?

我想知道我可以發送到 SQL 服務器的 UNION 的 SELECT 語句的數量是否有限制? 我可能在一個 SQL 語句中完成了多達 36 個,所以它變得相當長,字符明智。 (此外,每個 SELECT 語句本身都有些復雜,其中包含 CASE WHEN 語句。)

SQL 2008 BOL

“在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM