• SQL Server 触发器总结


    触发器(trigger)

    是一种特殊的存储过程,可以用来对表实施复杂的完整性约束,保持数据的一致性。当触发器所保护的数据发生改变时,触发器会自动被激活,并执行触发器中所定义的相关操作,从而保证对数据的不完整性约束或不正确的修改。

    SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。

    这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
    Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
    Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。

    Instead of 和 After触发器

    (1)AFTER触发器它是在执行INSERT、UPDATE、DELETE语句操作之后执行触发器操作。它主要是用于记录变更后的处理或检查,一旦发生错误,可以用Rollback Transaction语句来回滚本次扣件,不过不能对视图定义AFTER触发器。

    (2)INSTEAD OF触发器它在执行INSERT、UPDATE、DELETE语句操作之前执行触发器本身所定义的操作。而INSTEAD OF触发器是可以定义在视图上的。

    下面用一个我学习的例子:

    use TestA
    /*
    *在数据库TestA中向dbo.Tb_User插入数据时候同时向数据库TestB中的表dbo.Tb_BUser插入数据
    */
    if (object_id('insertbuserbyuser', 'TR') is not null)    
    drop trigger insertbuserbyuser
    go
    create  trigger insertbuserbyuser
    on dbo.Tb_User
    for insert 
    as
    begin
    insert into [TestB].[dbo].[Tb_BUser] select tuname,
    tupwd,trealname,tsex from inserted  
    end
    go
    
    
    /*
    *修改数据库TestA中dbo.Tb_User的数据时候同时修改数据库TestB中的表dbo.Tb_BUser数据
    */
    if (object_id('updatebuserbyuser', 'TR') is not null)    
    drop trigger updatebuserbyuser
    go
    create  trigger updatebuserbyuser
    on dbo.Tb_User
    for update
    as
    begin
    declare @otuid int
    SELECT  @otuid=[tuid]FROM deleted
    update[TestB].[dbo].[Tb_BUser] set tuname=a.tuname,
    tupwd=a.tupwd,trealname=a.trealname,tsex=a.tsex from inserted a
    where [TestB].[dbo].[Tb_BUser].tuid=@otuid 
    end
    go

    数据库图:

  • 相关阅读:
    基于Antlr4编写DSL
    【整理】ANTLR应用案例 | 在路上
    【整理】ANTLR应用案例 | 在路上
    The ANTLR Parser Generator
    ANTLR4权威参考手册
    ANTLR Examples
    ANTLRWorks: The ANTLR GUI Development Environment
    http://www.cnblogs.com/vowei/archive/2012/08/24/2654287.html
    写一个编译器
    写一个编译器
  • 原文地址:https://www.cnblogs.com/Cynosure/p/3573089.html
Copyright © 2020-2023  润新知