【发布时间】:2020-09-30 00:51:18
【问题描述】:
我有一个像这样的名为announcement 的父表
create table announcement
(
aid int primary key,
name varchar,
......
)
还有另一个表 cars 继承自 announcement (tpt),如下所示
create table cars
(
aid int primary key
foreign key references announcement(aid) on delete cascade,
.....
)
我知道如果我从announcement 中删除一行,那条记录也会从cars 中删除,因为“on delete cascade”。
但我想确定,如果从 cars 中删除了任何内容,那么该行也会从 announcement 中删除。
我写了一个触发器,而不是我从这个question 中学到的:
create trigger delCarFromA
on car
after delete
as
begin
delete from announcement
where announc.aid = car.aid;
end;
但我收到此错误:
无法绑定多部分标识符“car.aID”。
我该怎么办?
【问题讨论】:
-
级联是一种方式,“向上”键,而不是向下;因为他们删除了该行作为外键出现在其他地方的行。删除 primary 表中的一行,因为将其作为外键删除的行将是一个糟糕的主意,因为这最终会删除远远超过您期望的 2 行(如 @987654332主键上的@ 将再次
CASCADE)。 -
删除触发器有一个反映删除记录的特殊表'deleted'。因此,不要使用 car.aid,而是使用 deleted.aid
标签: sql sql-server database triggers