2016-11-17 9 views
0

Xtable에서 중복 행을 삭제할 때 sqlserver를 사용하여 YTable에서 삭제할 트리거를 만들었습니다. 참고 : YTable가 On_ID다른 관련 테이블에서 중복 행을 삭제할 때 테이블에서 삭제할 트리거 만들기

로 XTable에서 외부 키를 가지고

트리거 쿼리

CREATE TRIGGER trgAfterDeletev4 ON XTable 

AFTER DELETE 
AS 
declare @empid int; 

select @empid=d.[On_ID] from deleted d; 

Delete from YTable 
where [On_ID]= @empid 
PRINT 'AFTER DELETE TRIGGER fired.' 

합니다 (결과

WITH C AS(
    SELECT *, 
     RN = ROW_NUMBER()OVER(PARTITION BY [col1] ORDER BY [col2]) 
    FROM [Sourcing].[src].XTable 
) 
    DELETE FROM C WHERE RN > 1 

XTable

에서

(0 행을 중복 행을 삭제의) 영향을 받았다.) DELETE TRIGGER가 실행 된 후.

(영향을 1,271,060 행 (들))

답변

3

는 문이

select @empid=d.[On_ID] from deleted d 

가 제대로 작동하지 않습니다 대단히 감사 이러한 쿼리의 무슨 일이야하시기 바랍니다 XTable에서 1 개 이상의 레코드를 삭제할 때 여러 개를 배치 할 수 없기 때문에 ID를 단일 정수 변수에 넣습니다.

당신은 단순히 그것은 좋은 일

Delete from YTable 
where [On_ID] in (select [On_ID] from deleted) 
+0

에 트리거에서 삭제 문을 변경할 수 있습니다 당신에게 @Andy Korneyev 감사합니다 – Elsayed