我想知道我可以发送到SQL Server的一些UNION的SELECT语句是否有限制?我可能在一个SQL语句中完成了多达36个,所以它变得很长,性格明智。 (此外,每个SELECT语句本身都有一些复杂的CASE WHEN语句。)
答案 0 :(得分:13)
“任何数量的UNION运算符都可以出现在Transact-SQL语句中”
同样来自MSDN“SQL Server最大容量规范”(2008):
批量大小(1) 65,536 *网络数据包大小
包含SQL语句的字符串长度(批量大小)(1) 65,536 *网络包大小
(1)网络数据包大小是用于在应用程序和关系数据库引擎之间进行通信的表格数据流(TDS)数据包的大小。默认数据包大小为4 KB,由网络数据包大小配置选项控制。
在我看来,这意味着使用默认值时为268,435,456字节。请说你的查询比这短。
答案 1 :(得分:4)
Necromancing,因为我现在知道现实生活中的答案。
从技术上讲,就像Neil Moss说的那样,> 2.68亿字节(ASCII字符),或> 1.34亿个UTF-16字符。
但是,每个SELECT语句有<#34; 256个表&#34;的限制。
虽然您可以在查询 WITH UNION STATEMENTS 中使用超过256个表,但这样的查询不能可用作视图,表值函数或作为SELECT语句的子查询。
此外,如果您直接使用此类查询,则可能会在1&#39; 300-1&#39; 500 SELECTs处达到查询优化器的堆栈空间限制。
我知道,因为感谢一个伟大的(警告 - 讽刺)OCP(原始代码&#34;程序员&#34;),我们有这样的af * ed up架构,我实际上碰到了两个,256和1&#39; 300-1&#39; 500限制。
(每个对象类型一个表,以防任何人想知道;每个表具有完全相同的列模式(但不是名称) - 而不是具有对象类型的引用表...)
答案 2 :(得分:2)
根据这个post介于8000和16000之间,对于他的特定查询。可能主要是由SQL Server可用的资源所支配。
对于一个不需要这么多联合的替代方法,你可能有必要再提一个问题。