【发布时间】:2019-02-27 17:16:25
【问题描述】:
返回链接服务器“MYLINKEDSERVER”的 OLE DB 提供程序“MSDASQL” 消息“无法找到要更新的行。某些值可能已 自上次阅读以来发生了变化。”。
Msg 7343, Level 16, State 4, Line 1
The OLE DB provider "MSDASQL" for linked server "MYLINKEDSERVER" could not UPDATE table "[MSDASQL]".
行集正在使用乐观并发,并且在包含行最后一次获取或重新同步后,列的值已更改。
DECLARE @Counter nvarchar(1024),
@TSQL varchar(8000)
SET @Counter = 0
WHILE (@Counter <=(select Top 1 ID from mydb.dbo.tbl1 order by ID desc))
BEGIN
set nocount on
IF EXISTS(select Top 1 ID from mydb.dbo.tbl1 where ID = @Counter)
BEGIN
SELECT @TSQL = 'UPDATE OPENQUERY(MYLINKEDSERVER,''select * from mydb2.tbl2 where tbl1_id is not null and tbl1_id= ' + @Counter + ''')' + 'set employees = ' + CAST((select t.employees from mydb.dbo.tbl1 as t where t.ID = @Counter) as nvarchar)
EXEC (@TSQL)
SELECT @Counter=@Counter+1
END
ELSE BEGIN
SELECT @Counter=@Counter+1
END
END
【问题讨论】:
-
在 EXEC 之前添加
PRINT @TSQL并将生成的查询粘贴到此处。 -
第一行:UPDATE OPENQUERY(MYLINKEDSERVER,'select * from mydb2.tbl2 where tbl1_id is not null and tbl1_id= 4') set employees = 168
-
你看到了吗?查看最后一个帖子:social.msdn.microsoft.com/Forums/sqlserver/en-US/…
-
是的。但没有解决。因为 odbc 驱动程序。
标签: mysql sql-server linked-server