使用SQL触发器删除级联记录

数据库 SQL Server
SQL触发器:当改变(增、删、改)数据表的记录时,绑定在SQL语句(增、删、改)中的触发器能够触发某些事件或者函数,所以我们可以在触发器中编写一些处理语句。

下文将为您介绍使用SQL触发器来删除级联揭露的方法,并附相关实例,供您参考,希望对您有所帮助。

SQL触发器:当改变(增、删、改)数据表的记录时,绑定在SQL语句(增、删、改)中的触发器能够触发某些事件或者函数,所以我们可以在触发器中编写一些处理语句。

比如,当我们删除新闻类别的时候,由于外键的原因,我们无法删除新闻类别下有新闻内容的记录,但是通过触发器,我们就可以实现。

delete from category where id=5  --sql删除语句

create trigger trigcategorydelete  --当执行sql删除语句时,执行触发器

on category

after delete

as

begin

delete news where caId=(select id from deleted) --删除对应新闻类别的新闻内容

end

照一般的思维,这样就可以同时删除新闻类别和其下的新闻内容,但是这样执行却不成功。是因为关键字AFTER,AFTER表示在执行SQL删除语句后,再执行触发器里的语句。这样一来,顺序同样是先删除新闻再删除新闻内容,肯定不成功。

改变关键字after为instead of#p#

instead of,表示代替delete操作,而没有真正delete from category where id=5,当category表的删除时,同时触发了trigcategorydelete触发器,但是由于有instead of关键字,所以本身并不执行删除操作,而是执行触发器里的sql语句,从而可以替代之前的SQL语句。比如:

create trigger trigcategorydelete

on category

instead of delete

as

begin

declare @id int  --定义一个变量id

select @id=id from deleted  --从deleted临时表中,赋值id给变量@id

delete news where caId=@id  --先删除该类别下的所有新闻

delete category where id=@id  --然后删除新闻类别 

end

当我们执行 delete from category where id=5时,id=5的类别并没有真正删除,而是转而执行触发器里面的SQL语句

关于deleted表:

Deleted表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到deleted表中。Deleted表和触发器表通常没有相同的行。(//最后一句不是怎么明白啊?) by google

删除一条记录时候,他会把删除的这条记录放在一张临时表里,当你对category表进行删除时,在SQL返回的结果消息里面会提示出你删除的记录。

责任编辑:段燃 来源: CNBLOGS
相关推荐

2009-04-07 13:56:03

SQL Server触发器实例

2011-03-28 10:05:57

sql触发器代码

2010-05-18 15:36:44

MySQL触发器

2010-09-13 17:03:34

sql server触

2010-05-18 15:58:39

MySQL触发器

2011-05-20 14:06:25

Oracle触发器

2009-04-26 22:27:54

触发器密码修改数据库

2021-08-05 07:28:27

SQL触发器结构

2010-10-22 11:10:43

SQL Server触

2010-11-08 11:49:24

SQL Server管

2010-10-20 14:34:48

SQL Server触

2010-07-06 14:47:03

SQL Server数

2010-11-12 15:35:55

SQL Server约

2010-07-16 10:19:31

2010-10-12 10:10:55

mysql触发器

2010-07-05 11:01:37

Sql Server触

2011-03-03 09:30:24

downmoonsql登录触发器

2011-04-14 10:53:00

MySQLSQL触发器

2010-11-10 13:37:01

SQL Server触

2010-07-05 11:09:55

SQL Server触
点赞
收藏

51CTO技术栈公众号