使用MySQL Connector/ODBC 8.0时无法从SQL Server更新链接的MySQL表
解决方案
该问题是MySQL Connector/ODBC 8.0版本默认配置变更导致的,可按以下步骤修复:
- 调整ODBC数据源配置
打开ODBC数据源管理器(SQL Server为64位版本时需打开64位ODBC管理器),找到对应MySQL DSN进入编辑页,在详细设置-游标/结果分类下,勾选返回匹配行而非受影响行选项,保存后重启SQL Server实例生效。如果是无DSN的链接服务器配置,可直接在提供程序字符串中添加参数OPTION=2开启该特性。 - 优先使用
EXEC AT语法执行更新/删除操作
绕开OPENQUERY的游标更新限制,直接将SQL语句下发到MySQL端执行,兼容性和性能都更好,示例语法如下:
-- 更新操作示例 EXEC ('UPDATE admin_db.test_odbc_3 SET TDBC_DESC = ''mydesc'' WHERE TDBC_ID = 23') AT TDBAMYSQLTEST -- 删除操作示例 EXEC ('DELETE FROM admin_db.test_odbc_3 WHERE TDBC_ID = 23') AT TDBAMYSQLTEST
你已经开启了链接服务器的RPC Out参数,可直接使用该语法。
- 可选精度适配
如果修改上述配置后仍报错,可在OPENQUERY的查询语句中对timestamp列做格式化,统一精度避免SQL Server端值匹配失败:
UPDATE OPENQUERY( TDBAMYSQLTEST, 'SELECT TDBC_ID, TDBC_DESC, DATE_FORMAT(TDBC_TSU, ''%Y-%m-%d %H:%i:%s'') AS TDBC_TSU FROM admin_db.test_odbc_3 WHERE TDBC_ID = 23') SET TDBC_DESC = 'mydesc' WHERE TDBC_ID = 23
内容的提问来源于stack exchange,提问作者ehoefler
相关产品推荐
相关产品推荐

