多个操作语句的触发器为什么在执行时,只执行了第一句?

这个问题困扰了我好久,记得第一次遇到这个问题是半个月前,做牛腩新闻发布系统的数据库遇到这个问题,是关于级联删除的:当我们删除新闻类别的时候,由于外键的原因,我们无法删除新闻类别下有新闻内容的记录,但是通过如下触发器,我们就可以实现:

create trigger trigcategorydeleteon categoryinstead of deleteasbegindeclare @id int  --定义一个变量idselect @id=id from deleted  --从deleted临时表中,赋值id给变量@iddelete news where caId=@id  --先删除该类别下的所有新闻delete category where id=@id  --然后删除新闻类别 end

当时学习这里的时候,重点在“级联删除”。看完视频后,根据对触发器的理解,自己写的触发器,如下:

-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <删除新闻触发器,因为存在外键,在删除新闻时,需要先删除新闻评论>
-- =============================================
ALTER TRIGGER [dbo].[trigDeleteNews] ON  [dbo].[新闻表] instead of delete
AS
BEGIN--声明新闻变量declare @strNewsTitle varchar(10)--删除新闻评论delete 新闻评论表 where 新闻标题=(select 新闻标题 from deleted)--删除新闻delete 新闻表 where 新闻标题=@strNewsTitleEND

悲剧发生了,我写的触发器,只执行第一条语句:

第二条语句不执行,也就是说,我删除“新闻”时,只可以把“新闻评论”删除,而新闻却留了下来,这很让人头疼。当时怎么都没有解决掉,然后就把这个问号画到了现在。

第二次遇到了,只能解决。又翻出数据库,开始折腾。

终于发现一个问题:这是改正后的触发器,在删除新闻评论,和删除新闻的语句中,都换成了变量,而变量@strnewstitle 在开始就进行了赋值。比较第一次的触发器:首先:变量没有定义,所以第二条语句没有被执行,第一条语句中,么有使用变量,所以执行了。

总结:问题其实很容易发现,多一点细心就可以了。当时就因为这个“小细节”,是的一个写了90%的触发器不可以使用,做什么都一样,可见细节是必须要重视的。

而这段时间老是很浮躁,所以,思考问题,发现问题都变得那么的轻浮,把本不该拖拉的工作拖拉了很久,表示惭愧。

多个操作语句的触发器为什么在执行时,只执行了第一句?相关推荐

  1. python中正确的输入语句x、y=input_语句x=input()执行时,如果从键盘输入12并按回车键,则x的值是( )。_学小易找答案...

    [多选题]听障儿童辨音训练包括( ) [简答题]实现栈类(顺序栈跟链栈均可),并利用栈实现十进制到二进制的转换. 将源代码.py文件作为附件上传. [简答题]什么是空字典和空集合?如何创建 [简答题] ...

  2. python在input输入回车12_语句x=input()执行时,如果从键盘输入12并按回车键,则x的值是( )。 (5.0分)_学小易找答案...

    [单选题]语句x,y=eval(input())执行时,输入数据格式错误的是( ). (5.0分) [填空题]语句print('AAA',"BBB",sep='-',end='!' ...

  3. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  4. pl/sql操作数据库之触发器的使用

    pl/sql操作数据库之触发器的使用 这篇文章讲述的是pl/sql操作数据库之触发器的使用,如有错误或不当之处,还望各位大神批评指正. 什么是触发器? 触发器是许多关系数据库系统都提供的一项技术.在O ...

  5. MySQL数据库(3)_MySQL数据库表记录操作语句

    附: MYSQL5.7版本sql_mode=only_full_group_by问题1.查询当前sql_mode: select @@sql_mode2.查询出来的值为:set @@sql_mode ...

  6. SQL常用的操作语句

    SQL语句与Mysql的语句大体上比较相似.以下是sql server的一套练习题,是很好的数据库操作语句学习资料,学校的学习资料,在此整理了以下. 数据库exam:这是一个模拟电子商务,网上直销的数 ...

  7. oracle 停止触发器语句,oracle触发器语句

    ORACLE中触发器的判断IF语句 加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF ...

  8. plsql 触发器介绍 语句级别触发器、行级别触发器。

    /* 分类:1.DDL触发器执行create,alter,drop操作时,会激活的触发器2.DML触发器执行增.删除.修改时,激活的触发器3.系统事件触发器执行特定的系统事件时(启动.加载.登录.退出 ...

  9. Oracle 数据库常用操作语句大全

    原文:Oracle 数据库常用操作语句大全 一.Oracle数据库操作 1.创建数据库      create database databasename 2.删除数据库      drop data ...

最新文章

  1. 老师,我来帮你推问卷
  2. 设计模式C#实现(十六)——中介者模式
  3. 如何备份服务器日志到其他服务器_KIWI Syslog日志服务器搭建及配置
  4. 【SHOI2017】相逢是问候【扩展欧拉定理】【复杂度分析】【线段树】
  5. excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
  6. 机器学习中的聚类方法总结
  7. [kuangbin带你飞]专题九 连通图
  8. New Adventure----GUI Design Studio
  9. mysql数据库操作函数_MySQL中几个常用的数据库操作函数
  10. 不确定度计算器_内审员、LIMS系统、外部评审员、不确定度、注册计量师、实验数据分析处理、质量控制和期间核查、方法验证和确认 网络培训汇总...
  11. Java 实现万年历
  12. IMX8基于FFT的GPU和CPU的性能测试
  13. 火狐浏览器国内版和国际版区别
  14. 关于计算机病毒的试题,计算机病毒测试题.doc
  15. 分区助手扩大c盘后自动修复_【分区助手】如何扩大C盘容量?
  16. Linux中指令的前缀命令格式
  17. OSPF之Stub区域
  18. MSF编码与upx加壳过杀软
  19. uniapp省市区三级联动
  20. 在线PDF编辑网站http://www.pdfescape.com

热门文章

  1. 复合型人才八种能力_刚毕业在设计院做结构设计,感觉自己对很多东西都没有判断的能力,工作之外如何提升自己在结构方面的知识?...
  2. 数仓分层模型架构分享(2)
  3. Detecting Holes in Point Set Surfaces 笔记
  4. 芯片SA58672(功放芯片)
  5. linux常见桌面系统以及安装gnome远程桌面
  6. Python基础——魔法方法(二)
  7. 表单域修饰符numebr、trim、lazy
  8. UEFI开发探索94 – 迷宫小游戏
  9. 利用python,求解数独
  10. Python 函数 | zip 函数详解