T-SQL触发器的基本疑问

时间:2010-08-02 05:12:32

标签: tsql triggers

  1. 触发器定义中FOR和AFTER之间的区别是什么。使用一个与另一个的好处吗?

  2. 如果我发出更新5行的更新语句,触发器(FOR FOR UPDATE)会触发5次吗?如果是这样,是否有任何方法只对整个UPDATE语句触发一次触发器(即使它更新了多行)

  3. 是否有任何机会/情况在触发生命周期中的任何时间“插入”或“删除”表中都有多行。如果是这样,我可以快速获得样品吗?

  4. 感谢

1 个答案:

答案 0 :(得分:4)

每批次触发一次,应始终考虑到这一点。如果您执行多行更新插入或删除,则为是,所有行都将位于已插入或已删除的表中。例如命令

Delete table1 where state = 'CA' 

表中的所有行都包含CA状态,即使它们是10,000,000。这就是为什么触发器测试至关重要以及为什么触发器必须设计为处理多行操作的原因。如果设计不当以处理多行,则可以使deatabase适用于一行的触发器停止数小时,如果设计不正确以处理多行,则可能导致数据完整性问题。触发器不应该依赖于游标或循环,而是依赖于基于集合的操作。如果要将inserted或delted的内容设置为变量,则几乎可以肯定,当有人对其执行基于集合的操作时,yor触发器将无法正常工作。

SQL Server有两种基本类型的DML触发器,触发器在将记录放入表中后发生。这些通常也用于更新其他表。在触发器取代插入/更新/删除之前,它们通常用于对插入的表进行特殊处理。重要的是要知道before触发器不会执行发送到表的操作,如果您仍想删除/更新或作为触发器的一部分插入,则必须将其写入触发器。