0

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

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”返回消息“无法找到要更新的行。自上次读取以来,某些值可能已更改。”。

我不确定这意味着什么,任何帮助表示赞赏。

4

1 回答 1

2

上面的查询更改为:

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.*因为它似乎使它特定于从事件表中删除。这个页面帮助我意识到了这一点。

由于您无法通过 openquery 传递变量,因此我不得不使用其中之一

于 2012-11-27T14:37:03.437 回答