我有一个父表叫做 announcement
这样地
create table announcement
(
aid int primary key,
name varchar,
......
)
还有一张table cars
继承自 announcement
(tpt)像这样
create table cars
(
aid int primary key
foreign key references announcement(aid) on delete cascade,
.....
)
我知道如果我从 announcement
,将从中删除该记录 cars
也因为“删除级联”。
但我想确定如果 cars
已经发生的情况下,该行也将从中删除 announcement
.
我写了一个触发器,从这个问题中学到的是:
create trigger delCarFromA
on car
after delete
as
begin
delete from announcement
where announc.aid = car.aid;
end;
但我有个错误:
无法绑定多部分标识符“car.aid”。
我该怎么办?
2条答案
按热度按时间9fkzdhlc1#
请尝试下面的代码,
祝你工作顺利!
8fq7wneg2#
你的table是1:n的。一
announcement
可以有很多车,一辆车可以有一辆announcement
. 如果删除announcement
你删除了所有的车。但是另一个方向需要一个规则,例如。如果有
car
被删除,它的announcement
所有其他的车都必须删除。或
如果
announcement
的最后一个car
删除(即announcement
没有车)然后announcement
必须删除。我想你想要第二条规则。理想情况下,触发器应该是after语句触发器,但sqlserver不支持这种情况。与sql标准中定义的不同,sqlserver中的每个触发器都是一个
FOR EACH ROW
隐式触发。在一个
FOR EACH ROW
触发您可以访问已删除的汽车行。但这不是通过car.aid
,但与(select aid from deleted)
在sql server中。如果你想应用第二条规则,就像我假设的,你还需要一个
EXISTS
子句来查看announcement
还有车。如果要删除
announcemmnt
即使它还有车,那就把车拆了EXISTS
触发器的子句。