OPENQUERY SQL 服务器 MYSQL 更新

OPENQUERY SQL Server MYSQL UPDATE

我必须在链接服务器上工作。我的目标:通过 SQL 服务器(版本 13.0.1742.0)中的 OPENQUERY 更新 mysql 服务器(版本:8.0.21)中的整个 table。我试过了,但它产生了一个错误 Row cannot be located for updating. Some values may have been changed since it was last read 而这个 The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

update linkedTable
set 
    linkedTable.id_parent=unlinkedTable.IdCat1,
    linkedTable.code=unlinkedTable.CodeFamilleFAT,
    linkedTable.niveau=unlinkedTable.NiveauCategorieFAT,
    linkedTable.langue=unlinkedTable.CodeLangueFAT,
    linkedTable.nom=unlinkedTable.LibelleCommercialFAT,
    linkedTable.descriptionA=unlinkedTable.DescriptifCom1FAT,
    linkedTable.vignette=null,
    linkedTable.id_categorie=unlinkedTable.id
from openquery(NAMELINKEDSERVER, 'select id_categorie, id_parent, code, niveau, langue, nom, description as descriptionA, vignette from DatabaseMySQL.Table') as linkedTable
inner join DatabaseSQLserver.dbo.Table as unlinkedTable on unlinkedTable.Id = linkedTable.id_categorie

然后我试了这个:

update linkedTable
set 
    linkedTable.id_parent=unlinkedTable.IdCat1,
    linkedTable.code=unlinkedTable.CodeFamilleFAT,
    linkedTable.niveau=unlinkedTable.NiveauCategorieFAT,
    linkedTable.langue=unlinkedTable.CodeLangueFAT,
    linkedTable.nom=unlinkedTable.LibelleCommercialFAT,
    linkedTable.descriptionA=unlinkedTable.DescriptifCom1FAT,
    linkedTable.vignette=null,
    linkedTable.id_categorie=unlinkedTable.id
from openquery(NAMELINKEDSERVER, 'select id_categorie, id_parent, code, niveau, langue, nom, description as descriptionA, vignette from DatabaseMySQL.Table') as linkedTable
inner join DatabaseSQLserver.dbo.Table as unlinkedTable on unlinkedTable.Id = linkedTable.id_categorie
where linkedTable.id_categorie = 1

这项工作但只更新了一行。所以我写了一个存储过程来更新每一行但是太花时间了。

有人可以解释为什么我的第一个查询不起作用(问题 1)以及如何减少存储过程的时间(问题 2)吗?

我使用 while 循环(计算 id 的数量并更新每个 id)。

提前致谢。

亲切的问候。

我通过检查 MySQL 中 ODBC 驱动程序的一些选项并阅读一些论坛来解决问题。我勾选这个框。 enter image description here

此选项可以避免前面引用的错误。使用此选项,我可以更新多个值而不会在加入或其他请求时出错。感谢 Solarflare 和“另一个人”(我忘了名字)纠正我的错误(编辑 A POST)。祝你们都有美好的一天。