概述
个人重构时看有人登录时使用触发器,当时我是用存储过程+事务实现的,也没有进一步思考,表面理解触发器就是由一个事件触发另一个事件,存储过程也是封装了一组sql语句,再加上事务的一致性原则,也可以达到一个动作的完整性。现在牛腩中又涉及到这个东西,存在即合理,也填补一下学习中的空白,主要总结一下如何使用及和存储过程的不同。
一、建立:
1、 触发器是特殊的存储过程,只不过它的执行不是由程序调用,也不是手工启动,而是由事件来触发即Insert、Update、Delete这些动作,比如牛腩中删除新闻类别时,要删除类别下面的新闻及评论,这里在新闻类别下面建立删除新闻类别触发器,当执行时,还会包括一个或两个测试表,称之为inserted表和deleted表 (这里是deleted ),用于保存目标更新、插入或删除的数据信息,虽然不能直接修改测试表中的数据,但能通过SELECT语句,来检测INSERT,UPDATE或DELETE的结果。触发器的创建:
<span style="font-size:18px;">--====================================
-- Author:李立平
--Date:2014-10-7
--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、和存储过程相比:
首先建立时,我选择数据库—可编译性—数据库触发器,发现执行后并没有建好的触发器,后来才知道原来在每张表的下面,但第二张图上面建好的存储过程执行后就在数据库的可编译性下面。
二、使用(在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;
}
总结:我们要去尝试新事物,合理使用它们给我们带来的便利。
最后
以上就是想人陪小天鹅为你收集整理的浅谈触发器使用一、建立:二、使用(在D层代码中体现):的全部内容,希望文章能够帮你解决浅谈触发器使用一、建立:二、使用(在D层代码中体现):所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复