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」のOLEDBプロバイダー「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 に答える