用触发器对相关联的多表进行级连的删除操作_无声岁月_百度空间

以下方法(即函数)可以实现对表记录的删除操作

//删除新闻类别(连同其下的新闻及新闻评论一起删除)
        public bool delete(category ca)
        {
            bool flag = false;
            string sql = "delete from category where ";
            SqlParameter[] paras = new SqlParameter[]{
                new SqlParameter("@tid",ca.Id),               

};
            int res = sqlhelper.executenoquery(sql, paras);
            if (res > 0)
            {
                flag = true;
            }
            return flag;
        }

但如果有几个表相关联时,由于有外键记录,就会出错,如:


当想删除表:category中的记录时,如果表:news还有它的外键记录时就会出错,同样当想删除表:news中的记录时,如果表:commonte还有它的外键记录时也会出错。新闻类别对应许多新闻,新闻又对应许多新闻评论,要删除新闻类别得先删除其下对应的所有新闻,要删除新闻得先删除其下的所有新闻评论。那么如何解决这样的问题呢?方法好多,其中用触发器可以解决,如下图的触发器就可以解决:


如我们在文本框中输入要删除的category的id为11,在临时表里就能找出11


触发器的源码如下:

USE [xinwen]
GO
/****** 对象: Trigger [dbo].[trigcategorydel]    脚本日期: 05/26/2010 12:27:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 作者:无声岁月
-- 创建日期: 2010年5月26日
-- 说明: 删除类别触发器
ALTER TRIGGER [dbo].[trigcategorydel]
   ON [dbo].[category]
   instead of DELETE
AS
BEGIN
declare @caid int
--查找要删除的ID
select @caid=id from deleted
--删除与之相关联的评论
delete commonte where newsid in(select id from news where )
--删除与之相关联的新闻
delete news where
--删除要删除的新闻类别
delete category where

END

有关触发器的建立不是很难,本空间里有过介绍,感兴趣的可以找来看看



郑重声明:资讯 【用触发器对相关联的多表进行级连的删除操作_无声岁月_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——