无法找到行进行更新

时间:2012-11-27 14:01:07

标签: sql-server tsql linked-server

我正在尝试使用以下内容从事件表中删除一些行。

DECLARE @PRODUCTION_ID int = 13811

DELETE openquery(TEST, 
'SELECT p.id as production_id FROM EVENTS ev 
LEFT JOIN production_seasons ps ON ev.production_season_id = ps.id 
LEFT JOIN productions p ON ps.production_id = p.id')
where production_id = @PRODUCTION_ID

但是,当返回事件时,即当存在非空结果集时,查询失败。如果结果集为空,则查询只返回(0 row(s) affected)

我得到的错误是:

  

返回链接服务器“TEST”的OLE DB提供程序“MSDASQL”   消息“无法找到行以进行更新。某些值可能已经存在   自从上次阅读以来发生了变化。“。

我不确定这意味着什么,感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

上述查询已更改为:

DECLARE @TSQL varchar(500)
SELECT  @TSQL = 
'DELETE OPENQUERY(TEST,''SELECT ev.* FROM EVENTS ev 
LEFT JOIN production_seasons ps ON ev.production_season_id = ps.id 
LEFT JOIN productions p ON ps.production_id = p.id WHERE p.id = ' + convert(varchar, @PRODUCTION_ID) + ''')'
EXEC (@TSQL)

重要的部分是select ev.*,因为它似乎特定于从事件表中删除。 This page让我意识到了这一点。

由于你不能通过openquery传递变量,我必须使用one of these