OIC使用Microsoft SQL Server连接器执行Merge操作报错问题咨询
SQL Server对Merge操作的支持说明
Microsoft SQL Server原生支持Merge(即Upsert,存在则更新、不存在则插入)类操作,你遇到的故障并非SQL Server不支持该操作导致,而是OIC侧的字段类型映射配置错误引发的。
报错根因与解决办法
根因定位
报错核心是SysTimestamp字段类型转换失败:
SQL Server中timestamp(别名rowversion)类型是系统自动维护的8字节二进制数据,对应Java类型为字节数组(报错中的class [B就是Java字节数组的类标识),但你在OIC的testUpsert.Articulo对象建模中,错误将该字段映射为java.lang.Integer类型,执行Merge操作时传入的二进制值无法转换为Integer,进而触发执行失败。
具体解决步骤
- 调整字段映射配置:进入OIC的SQL Server连接器对象建模页面,找到
SysTimestamp字段的映射规则,将其类型从Integer修改为二进制/字节数组类型,与SQL Server侧的字段类型对齐。 - 可选优化:如果
SysTimestamp是SQL Server自动维护的行版本字段,不需要业务侧手动赋值,直接将该字段从Merge操作的入参映射列表中移除即可,SQL Server会在插入、更新数据时自动生成该字段的值。 - 校验主键映射:确认你用于Merge匹配的主键字段,OIC侧与SQL Server侧的类型、长度完全一致,避免其他隐藏的类型转换问题。
- 配置验证:检查Merge操作的匹配规则,确认没有将
SysTimestamp错误加入匹配条件或主动更新的字段列表中,调整后先做单条数据的测试,验证插入、更新两种场景都能正常执行。
内容的提问来源于stack exchange,提问作者simone vanotti
相关产品推荐
相关产品推荐

