2012-11-27 83 views
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)

我得到的錯誤是:

OLE DB提供程序「MSDASQL」鏈接服務器「TEST」返回「行無法定位用於更新某些值可能已經 改變,因爲這是最後一次 消息。讀。」。

我不確定這是什麼意思,任何幫助表示讚賞。

+0

是否有理由使用OPENQUERY進行刪除?是否可以直接刪除記錄? – Lamak

+0

鏈接到一個MySQL數據庫。我不認爲有任何其他選擇? – Abs

+0

我設法解決了這個問題,因爲如果表沒有被指定,例如'SELECT EV。*',MySQL似乎會被刪除哪些行。添加一個答案,它可以幫助某人。 – Abs

回答

0

上面的查詢變爲這樣:

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

相關問題