sql - 在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误
问题描述
我正在尝试合并 5 个表。它们每个都有相同数量的列(300+)。我可以愉快地单独加载每个表。
错误是
无法创建大于允许的最大行大小 8060 的大小为 8161 的行。
这是不言自明的 - 整行组合(300 多列)在内存中太大。
我很困惑桌子最初是如何制作的,以及如何期望我联合起来?联合不会增加行大小,只会增加行数,如果可以单独选择联合,那么联合如何触发这一点很困惑。
有没有办法抑制这种限制?
谢谢!
解决方案
类型转换可以改变单个列的大小。查询不需要union
所有列都具有完全相同的类型,因此它允许进行一些隐式转换。
例如,这个:
select convert(tinyint, 1)
union all
select convert(int, 102345678)
返回和整数 - 与tinyint
. 对于日期和日期时间,甚至对于国家字符集,这很容易发生。
推荐阅读
- qt - QML 启动外部程序:使用 QProcess 失败构建
- spring-boot - Spring Data MongoDB 无法使用我的存储库测试的@Transactional:无法为@Transactional 测试检索 PlatformTransactionManager
- lisp - 将文档字符串合并到 def* 宏中的正确方法?
- c# - 如何使用 Enum.GetValues() 方法的结果?
- python - 无法在 Ubuntu 中使用 Python 中的标准输入
- c++ - 我对 std::shared_ptr 删除器有疑问
- java - 如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?
- javascript - 如何防止点击子元素触发点击它所在的标签?
- javascript - 如何删除与其父级的 id 和类都匹配的某个类的元素?
- jmeter - Jmeter - Perfmon 摘要报告