2012-11-27 4 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 제공자 연결된 서버 "TEST"에 대한 "MSDASQL"이 메시지 "행이가 마지막으로 시작된 이후 일부 값은 가 변경되었을 수 있습니다 업데이트하기위한 찾을 수 없습니다 돌아왔다.이 독서.".

나는 무엇을 의미하는지 잘 모르겠다.

+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을 사용해야했습니다.

관련 문제