Почему я получаю "Неверный синтаксис рядом с ключевым словом" FOR ""? - PullRequest
0 голосов
/ 04 января 2012

У меня есть две таблицы person и customer. При удалении из person Я хочу удалить из customer:

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'.

Почему он не может читать для каждой строки?

Ответы [ 2 ]

3 голосов
/ 04 января 2012

Если вы используете SQL Server, вам нужно:

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, это так:

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.

1 голос
/ 04 января 2012

Или вы можете использовать:

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