zoukankan      html  css  js  c++  java
  • 浅谈触发器使用

        个人重构时看有人登录时使用触发器,当时我是用存储过程+事务实现的,也没有进一步思考,表面理解触发器就是由一个事件触发还有一个事件,存储过程也是封装了一组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;
            }

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

  • 相关阅读:
    CTK 编译
    MITK 2021.2编译
    执行git add .报错LF will be replaced by CRLF in
    vscode标记“&&”不是此版本中的有效语句分隔符
    vscode prettier插件使用无效
    vscode使用技巧
    kafka及hdfs常用命令
    博客已迁移
    SVM
    逻辑回归
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5223126.html
Copyright © 2011-2022 走看看