用触发器进行级联删除
这次遇到的问题是表的级联删除,当删除一个主键信息时会出错,因为还有外键信息,要想全部删除就用到了触发器。
<span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">CREATE TRIGGER trigCategoryDelete (创建触发器)
ON Category (在哪个表上创建)
after DELETE (引发触发器的事件)
AS
BEGIN
delete news where caID=(select id from deleted)(触发器引发后的一些处理语句)
END
</span>
但是after是在delete发生之后的,所以这样还是会报错。删除操作都已经结束了还怎么删除外键呢。
instead of 代替删除语句:
<span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
declare @id int
select @id=id from deleted
--删除新闻
delete news where caId=@id
--删除新闻类别
delete category where id=@id
END</span>
这样就能删除外键里的信息了。
如果是三个表的级联删除
<span style="font-family:Microsoft YaHei;font-size:16px;color:#6600cc;">ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
declare @caId int
select @caId=id from deleted
--删除评论
delete comment where newsId = (select id from news where caId=@caId)
--删除新闻
delete news where caId=@caId
--删除新闻类别
delete category where id=@caId
END</span>
但是这样的话会报错,错就错在一条新闻下对应着多条评论,解决办法就是把“=”改为“in”,这样所有查处的评论都可以删除了
ps:至于前面出发器的名称和表的名称不太一样,相信大部分人都知道,当保存触发器后,再打开的时候就会自动补全表信息。
作者:lixueru0819
相关新闻>>
- 发表评论
-
- 最新评论 进入详细评论页>>
今日头条
更多>>您可能感兴趣的文章
- Add View -> Strongly-typed view ->Model Class
- Asp.net MVC源码分析--UrlRoutingModule与Service location的
- 让asp.net mvc的Action支持jQuery直接提交的javascript对
- .NET简谈设计模式之(装饰者模式性能问题?)
- DCOM--高效率主从服务器程序的新概念
- .Net插件框架的实现及分析(二)
- 使用HttpWebRequest下载经过重定向的文件
- .NET类库中发现设计模式:策略模式
- ASP.ENT前台更改绑定数据的日期格式
- C#高级编程:使用XPath命名空间中的类[2]



