提问人:Chloe 提问时间:10/7/2023 最后编辑:Chloe 更新时间:10/7/2023 访问量:56
如果 mysql 链接服务器中的另一个数据与本地 sql 服务器中的数据匹配,如何更新 mysql 链接服务器中的数据
How to update data in a mysql linked server if another data from it matches the data from the local sql server
问:
我有两个表,都是本地的: SQL Server 中的 tableA userId、userNo(所有 nvchar) 链接 MySQL 中的 tableB userid、userno(所有 nvchar)
如果 userId 与 userid 匹配,我想将 userNo 更新为 userno。
并在 tableA 中创建为触发器,以便在数据到来时更新 tableB。
我尝试进行的每个查询都会给我带来语法错误或其他东西。
请帮忙,谢谢!
我在下面尝试过
SELECT userId FROM tableA AS a
SELECT * FROM OPENQUERY(MYSQL_LINKED,'SELECT userid FROM tableB') AS b
UPDATE OPENQUERY(MYSQL_LINKED, 'select userno from tableB')
SET userno = userNo
WHERE a = b
根据 @Patrick Hurst 更新
UPDATE a
SET a.userno = s._userNo
FROM OPENQUERY(MYSQL_LINKED, 'SELECT * FROM gameacc.logintable
WHERE userid = ''s._userId''') a
INNER JOIN WORLDDB.GAME.USERINFO s
ON a.userid = s._userId;
我运行了上面的代码,它确实没有出现任何错误,但是它说“受影响的行:0”,但我很确定 userid 和 _userId 都有数据并且可以确认它们是相同的,我该怎么办?
答:
1赞
Patrick Hurst
10/7/2023
#1
您可以尝试以下语法:
UPDATE a
SET <ColumnToUpdate> = <Value>
FROM OPENQUERY(<YourLinkedServer>, 'SELECT * FROM <Database>.<Schema>.<Table>
WHERE <FilterColumn> = ''<FilterValue>''') a
INNER JOIN <LocalDatabase>.<LocalSchema>.<LocalTable> s
ON a.<RemoteColumnToMatchOn> = s.<LocalColumnToMatchOn>;
将占位符替换为您的值。
最好首先使用 WHERE 子句将更新限制为单行,以确保更改符合预期。
评论
0赞
Chloe
10/7/2023
谢谢你这么快的回答!但是,我不想输入任何手动数据,因为我希望它自动作为触发器执行,因为数据已经存在。
0赞
Patrick Hurst
10/7/2023
理解,但您可以将 和 替换为列名。不过,请务必使用适当的别名。<ColumnToUpdate>
<Value>
0赞
Chloe
10/7/2023
现在这是我非常困惑的部分,例如,如何为我的情况使用适当的别名?非常感谢!
0赞
Patrick Hurst
10/7/2023
您可以选择别名。例如:在本例中是表的别名。在上面的示例中,REMOTE 表的别名为 ,本地表为 。为了更新远程表,我们曾经将其更改为使用我们可能使用的列名,这将导致远程列 MyColumn 设置为本地列 MyLocalColumn 的值SELECT * FROM MyTable a
a
a
s
UPDATE a SET <ColumnName> = <Value>
UPDATE a SET MyColumn = s.MyLocalColumn
0赞
Chloe
10/7/2023
我运行了您的代码,它确实没有出现错误,但是它说“受影响的行:0”,但我很确定 userid 和 _userId 都有数据并且可以确认它们是相同的,我该怎么办?
评论