国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > 浅谈触发器使用

浅谈触发器使用

来源:程序员人生   发布时间:2014-11-10 08:15:24 阅读次数:2703次

    个人重构时看有人登录时使用触发器,当时我是用存储进程+事务实现的,也没有进1步思考,表面理解触发器就是由1个事件触发另外一个事件,存储进程也是封装了1组sql语句,再加上事务的1致性原则,也能够到达1个动作的完全性。现在牛腩中又触及到这个东西,存在即公道,也弥补1下学习中的空白,主要总结1下如何使用及和存储进程的不同。

1、建立:

      1、   触发器是特殊的存储进程,只不过它的履行不是由程序调用,也不是手工启动,而是由事件来触发Insert、Update、Delete这些动作,比如牛腩中删除新闻种别时,要删除种别下面的新闻及评论,这里在新闻种别下面建立删除新闻种别触发器,当履行时,还会包括1个或两个测试表,称之为inserted表和deleted(这里是deleted ),用于保存目标更新、插入或删除的数据信息,虽然不能直接修改测试表中的数据,但能通过SELECT语句,来检测INSERT,UPDATE或DELETE的结果。触发器的创建:

<span style="font-size:18px;">--==================================== -- Author:李立平 --Date:2014⑴0⑺ --Description:删除种别时,删除响应新闻和评论 --==================================== ALTER TRIGGER [dbo].[trigCategoryDelete] on [dbo].[T_Category] instead of Delete AS BEGIN declare @caID INT SELECT @caID =id from deleted --删除评论 delete T_Comment where newsid in(select newsid from T_News where caID=@caID) --删除新闻 delete T_News WHERE caID=@caID --删除种别 DELETE T_Category where id=@caID END</span>

2、和存储进程相比:

         首先建立时,我选择http://www.wfuyu.com/db/―可编译性―http://www.wfuyu.com/db/触发器,发现履行后并没有建好的触发器,后来才知道原来在每张表的下面,但第2张图上面建好的存储进程履行后就在http://www.wfuyu.com/db/的可编译性下面。



2、使用(D层代码中体现):

    存储进程在使用时,用户通过指定存储进程的名字并给出参数(如果该存储进程带有参数)来履行它 ,而触发器就是普通的sql语句,在履行这个事件时调用触发器这个操作。

1、存储进程(删除新闻功能):

<span style="font-size:18px;">/// <summary> /// 删除新闻 /// </summary> /// <param name="id">新闻id</param> /// <returns>布尔</returns> public bool Delete(string id) { bool flag = false; string cmdText = "NewsDelete"; SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@id", id) }; int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.StoredProcedure); if (res>0) { return true; } return flag; }</span>

2、触发器(删除种别功能):

/// <summary> /// 删除新闻种别,连同删除新闻及新闻评论,用到触发器 /// </summary> /// <param name="id">新闻id</param> /// <returns>布尔</returns> public bool Delete(string id) { bool flag = false; string cmdText = "delete T_Category where id=@id"; SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@id",id ) }; int res = sqlhelper.ExecuteNonQuery(cmdText, paras, CommandType.Text); if (res>0) { return true; } return flag; }

       总结:我们要去尝试新事物,公道使用它们给我们带来的便利。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生