【问题标题】:"Cannot create a row ... greater than the allowable maximum row size" error when applying UNION on tables with equal number of columns在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误
【发布时间】:2020-04-22 10:20:50
【问题描述】:
我正在尝试合并 5 个表。它们每个都有相同数量的列(300+)。我可以愉快地单独加载每个表。
错误是
无法创建大于允许的最大行大小 8060 的大小为 8161 的行。
这是不言自明的 - 整行组合(300 多列)在内存中太大。
我很困惑最初是如何制作这张桌子的,以及如何期望我联合起来?联合不会增加行大小,只会增加行数,如果可以单独选择联合,那么联合如何触发这一点很困惑。
有没有办法抑制这种限制?
谢谢!
【问题讨论】:
标签:
sql
sql-server
tsql
union
【解决方案1】:
类型转换可以改变各个列的大小。 union 查询不需要所有列都具有完全相同的类型,因此它允许进行一些隐式转换。
例如,这个:
select convert(tinyint, 1)
union all
select convert(int, 102345678)
返回和整数——与tinyint 相比,多了三个字节。对于日期和日期时间,甚至对于国家字符集,这很容易发生。