2012-01-04 4 views
0

나는 두 개의 테이블 personcustomer을 가지고 있습니다. person에서 삭제할 때 나는 customer에서 삭제할 :왜 'FOR'키워드 근처에 '잘못된 구문이 생깁니 까?'

여기
CREATE TRIGGER DELCUS 
ON Person 
AFTER DELETE 
FOR EACH ROW 
begin 
DELETE FROM customer 
WHERE customer.PersonID_Fk=Person.PersonId; 
end 

오류 내가 얻을 수있다 :

Msg 156, Level 15, State 1, Procedure DELCUS, Line 5 
Incorrect syntax near the keyword 'FOR'. 

가 각 행에 대해 읽을 수없는 이유는 무엇입니까?

CREATE TRIGGER DELCUS 
ON Person 
AFTER DELETE AS 
begin 
DELETE c 
FROM customer 
WHERE EXISTS (select 1 from deleted where customer.PersonID_Fk=deleted.PersonId); 
end 

당신이 MySQL을 사용하는 경우, 그것은이의 : SQL Server를 사용하는 경우

+1

사용하고있는 데이터베이스? – Atonewell

+0

sql server 2008 – Nickool

+0

SQL Server에'FOR EACH ROW '가 없습니다 - 트리거는 ** 문 ** 당 ** 번 (** 행 당 한 번 ** NOT **) 호출되며 ** 여러 행으로 호출 될 수 있습니다 * * 삽입, 갱신 또는 삭제되는 행을 보유하고있는'Inserted' 및/또는'Deleted' 의사 테이블에서. 트리거를 한 번에 여러 행을 처리 할 수 ​​있어야합니다. –

답변

3

, 당신이 원하는

CREATE TRIGGER DELCUS 
ON Person 
AFTER DELETE AS 
begin 
DELETE c 
FROM customer 
WHERE EXISTS (select 1 from old where customer.PersonID_Fk=old.PersonId); 
end 

하지만 실제로는을, 당신은 실제로 FK 세트가있는 경우 어쨌든 참조 실패로 사람을 삭제하려고하면 오류가 발생합니다. 가장 좋은 방법은 FK를 on delete cascade으로 설정하는 것입니다.

+0

메시지 156, 수준 15, 상태 1, 프로 시저 DELCUS, 줄 4 'begin'키워드 근처의 구문이 잘못되었습니다. – Nickool

+0

@nikparsa - 'as'을 잊었습니다. – Eric

+0

lol 고마워요. 승인 됨 – Nickool

1

아니면 사용할 수 있습니다

DELETE FROM customer 
WHERE customer.PersonID_Fk in (select personid from deleted) 
+0

고맙습니다. – Nickool

관련 문제