触发器详解

发表日期:2022-10-19 11:20:47 | 来源: | | 浏览(832) 分类:SQLServer

知识点:触发器里有两张内置表,inserted 表和deleted 表

deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。


inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。


1.插入操作(Insert) 

inserted 表有数据,deleted 表无数据 


2.删除操作(Delete) 

inserted 表无数据,deleted 表有数据 


3.更新操作(Update) 

inserted 表有数据(新数据),deleted 表有数据(旧数据)


例子:

我们有一张House表,有个日期格式字段:modify_microtime datetime ,我们希望当House表有新增或修改数据的时候触发更新这个字段为最新的时间。

创建触发器:

create TRIGGER [dbo].[trigger_House(触发器的名字)]
    ON [dbo].[House(监听的表名)]
    AFTER INSERT, UPDATE -- 插入/修改后触发 ,delete 删除后触发
    AS
    BEGIN

        SET NOCOUNT ON;
        -- 你的业务逻辑 
        update House set modify_microtime = getdate() where HID in (select HID from inserted);
        
        -- 注意这句非常重要 where HID in (select HID from inserted) 查找更新的记录行
        -- 如果House表一次更新的是多行,那么触发的inserted 表也是多行,所以这里用了where in 而不是 =

    END


修改触发器:

只需要把创建语句的create 改为 alter 即可


删除触发器:

drop trigger 触发器名字
集速网 copyRight © 2015-2022 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。