3

我需要帮助编写将从 SQL 服务器更新 MySql 表的查询。我已经创建了链接服务器,并且选择查询工作正常,但在更新时出现错误。我对编写此类查询真的很陌生,所以请帮助我理解错误消息及其含义。

我的更新查询:

UPDATE openquery(stagedb_za, 'Select acm_flag FROM aol_center WHERE nid = 6439')
Set acm_flag = 'P' 

错误:

链接服务器“stagedb_za”的 OLE DB 提供程序“MSDASQL”返回消息“无法找到要更新的行。自上次读取以来,某些值可能已更改。”。消息 7343,级别 16,状态 4,第 1 行链接服务器的 OLE DB 提供程序“MSDASQL”无法更新表“[MSDASQL]”。行集正在使用乐观并发,并且在上次获取或重新同步包含行之后,列的值已更改。

4

2 回答 2

12

这整个问题随着 MySQL ODBC 连接器上的设置而消失。

在链接到 MySQL 的 SQL Server 上,进入链接服务器使用的 MySQL ODBC 连接上的配置屏幕。打开“详细信息”。在“光标/结果”选项卡上。勾选“返回匹配的行而不是受影响的行”。

在进行该配置更改后,将 MySQL 字段值设置为其已有值的更新不会返回错误。

在我在另一个论坛上发现这一点之前,我已经输入了很多代码来逐个字段地过滤掉有问题的值。这很简单。

于 2014-08-26T22:40:43.393 回答
4

好的,我得到了答案。似乎当您更新列值时,如果新值与现有值相同,则将其视为没有更改,因此不会发生更新。

在我的情况下,我将 acm_flag 更新为“P”,但它的值已经是“P”,所以没有发生更新。当我尝试将其更新为不同的值时,它工作得很好。

于 2012-03-14T09:34:05.793 回答