SQL Server:UNION数量的限制是多少?

ahm*_*md0 7 sql sql-server union

我想知道我可以发送到SQL Server的一些UNION的SELECT语句是否有限制?我可能在一个SQL语句中完成了多达36个,所以它变得很长,性格明智.(此外,每个SELECT语句本身都有一些复杂的CASE WHEN语句.)

Nei*_*oss 13

SQL 2008 BOL

"任何数量的UNION运算符都可以出现在Transact-SQL语句中"

同样来自MSDN "SQL Server的最大容量规范"(2008):

批量大小(1) 65,536*网络包大小

包含SQL语句的字符串的长度(批处理大小)(1) 65,536*网络包大小

(1)网络数据包大小是用于在应用程序和关系数据库引擎之间进行通信的表格数据流(TDS)数据包的大小.默认数据包大小为4 KB,由网络数据包大小配置选项控制.

在我看来,这意味着使用默认值时为268,435,456字节.请说你的查询比这短.


Ste*_*ger 8

死灵法师,因为我现在知道了现实生活中的答案。

从技术上讲,正如 Neil Moss 所说,> 2.68 亿字节(ASCII 字符),或> 1.34 亿个 UTF-16 字符。

但是,“每个 SELECT 语句 256 个表”是有限制的。

虽然您可以在WITH UNION STATEMENTS查询中使用超过 256 个表,但此类查询不能用作视图、表值函数或 SELECT 语句的子查询。

此外,如果您直接使用这样的查询,您可能会在 1'300-1'500 个 SELECT 左右达到查询优化器的堆栈空间限制。

我知道,因为多亏了一个伟大的(警告 - 讽刺)OCP(原始代码“程序员”),我们有这样的架构,实际上我同时遇到了 256 和 1'300-1'500 的限制.

(每个对象类型一个表,以防万一;每个表具有完全相同的列模式(但不是名称) - 而不是具有对象类型的引用表......)