我正在尝试使用以下内容从事件表中删除一些行。
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” 消息“无法找到行以进行更新。某些值可能已经存在 自从上次阅读以来发生了变化。“。
我不确定这意味着什么,感谢任何帮助。
答案 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。