说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

使用触发器时想到的

编辑:说三道四文库 发布时间:2018-02-24 06:16
HTML文档下载 WORD文档下载 PDF文档下载
比如有5个表A B C D E,其中E表的数据是从前四个表的数据计算得来。我开始的想法是,A B C D四个表都有触发器,A触发B,B触发C,C触发D,最后D触发E,可是想到一个问题,如果在这个连锁反应中某个触发器由于某种原因没有完成,从而造成这个连锁反应不能进行到底,那岂不是要影响这几个表中数据的完整性约束?

把几个触发器写在一起,合并成一个触发器似乎是个办法,但实际上还是存在同样的问题。那么我想问的是,在触发器中是否可以写事务?触发器和事务如何结合使用?
写一存贮过程,在存贮过程中启用事务,在触发器中调用该存贮过程。
能不能直接写个事务,把所有触发器要做的事情都做了?作业可以调用事务吗?
建议使用过程,抵归触发器很容易引起意想不到的麻烦。
连续递归触发会有问题的
我现在的想法是:
做个作业(因为要定时执行),作业里面的步骤写这个事务,把原来用触发器做的事情都做了。

这样可以吗?
楼上各位不懂基本概念!

触发器就是工作在事务中(SQL Server每一条都会工作在事务中,所以才叫做Transaction-SQL呀!修改A的语句工作在事务中,因此第一个触发器工作在事务中,同时第二个触发器工作在——嵌套在——同一个事务中....后面的触发器操作也是同样的!)
任何一个触发器操作Rollback,都会将整个4个触发器操作Rollback,然后报告客户端。

可见,从事务处理代码结构完整性、程序简洁性、稳定性上考虑,触发器大大优于存储过程。
哦?是这样?
还有哪位有高见?大家来讨论一下?
建立一个JOB;
写一个存储过程处理表之间的关系,放在JOB中执行;
定期执行JOB。
最好不用触发器。
您这么说?为什么“最好不用触发器”?楼上那位却说触发器优于存储过程?
我也认为建一个存储过程较好,
因为频频调用触发器,
可能出现问题的频率会更高。
同感写存储过程,好维护过触发器好多
直接用存储过程,做成事务,这样也很好的啊
好的,谢谢大家!
并不是说任何一个触发器都开起一个事务,而是说第一个(以及后边任何一个)触发器都工作在引发第一个触发器代码的事务中。

第一个触发器“触发”第二个触发器,以及第二个触发第三个......和存储过程的exec命令没有多大区别,只不过这是系统根据表结构定义自动完成的,而存储过程需要程序员特别定义调用流程。

即使在存储过程中,也要保存每一步数据修改的事务日志,但是不能用 inserted和deleted 查询到,因此存储过程不但没有比触发器少做什么处理动作,反而有很多重要信息查询不到。
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘