0

如何指定一个触发器来检查插入到表外键属性中的数据是否实际存在于引用表中。如果存在,则不应执行任何操作,否则触发器应删除插入的元组。

例如:考虑有 2 个表 R(A int Primary Key) 和 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; 

我确定在触发器的开始和结束块中指定内部子查询时犯了一个错误。我的问题是如何制作这样的触发器?

4

1 回答 1

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 看起来很乱。

于 2010-05-13T23:53:40.827 回答