如何指定一个触发器,它检查数据是否插入表外键属性,实际存在于引用表中。如果存在则不应执行任何操作,否则触发器应删除插入的元组。
例如:考虑有2个表 R(A int主键)和 S(B int Primary Key,A int Foreign Key References R(A))。
我写了一个这样的触发器:
Create Trigger DelS
BEFORE INSERT ON S
FOR EACH ROW
BEGIN
Delete FROM S where New.A <> ( Select * from R;) );
End;
我确定在触发器的Begin和end Blocks中指定内部子查询时出错了。我的问题是如何制作这样的触发器?
答案 0 :(得分:0)
外键约束不会更好地达到你想要的效果吗?
ALTER TABLE [dbo].[TABLE2] WITH CHECK
ADD CONSTRAINT [FK_TABLE2_TABLE1] FOREIGN KEY([FK_COLUMN])
REFERENCES [dbo].[TABLE1] ([PK_COLUMN])
GO
这就是外键约束的意图 - 具体来说,不允许插入违反外键关系的记录。
请注意,为了使这个例子更具可读性,我使用了不同的列和表名 - S,A,R和B看起来像一团糟。