对具有相同列数的表应用 UNION 时"Cannot create a row ... greater than the allowable maximum row size"错误



我正在尝试联合5个表。它们各自具有相同数量的列(300+(。我可以很高兴地单独装载每张桌子。

错误为

无法创建大小为8161的行,该行大于允许的最大行大小8060。

这是不言自明的-整行(由300多列组成(在内存中太大。

我很困惑这张桌子最初是如何制作的,我怎么会被期望结合在一起?并集不会增加行的大小,只是增加行的数量,所以混淆了如果可以单独选择它们,并集是如何触发的。

有没有办法抑制这种限制?

谢谢!

类型转换可以更改单个列的大小。union查询不要求所有列都具有完全相同的类型,因此它允许一些隐式转换。

例如:

select convert(tinyint, 1)
union all
select convert(int, 102345678)

返回和integer——与tinyint相比多了三个字节。对于日期和日期时间,甚至对于国家字符集,这种情况都很容易发生。

最新更新