SQL Server 触发器

  1. SQL SERVER中有三类触发器FOR、AFTER、INSTEAD OF

    1、AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。用英文简单理解就是 在...之后执行

    2、FOR的理解就是与AFTER类同,即AFTER(FOR)

    3、INSTEAD OF,在执行SQL语句前取代。INSREAD OF是指定执行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作。

  2. 2

    FOR类的语法

    CREATE TRIGGER tf_name --自定义触发器的名称

    ON table --此处为表名,触发器的表名,意为在哪个表创建触发

    FOR INSERT --触发类型:INSERT、UPDATE、DELETE;分别意为插入时、更新时、删除时触发,依据英文意思理解即可

    AS

    BEGIN

    SET NOCOUNT ON --可有可无

    DECLARE  @.. ;--声明变量

    select 

    insert

    --相应的select语句,insert语句(update语句、delete语句)

    SET NOCOUNT OFF--可有可无

    END

    GO

    SQL Server 触发器
  3. 3

    AFTER类的语法

    CREATE TRIGGER tf_name

    ON table

    AFTER INSERT,UPDATE --定义都个触发,可以用逗号隔开

    AS

    BEGIN

    SET NOCOUNT ON --可有可无

    DECLARE  @.. ;--声明变量

    select 

    insert

    ...

    --相应的select语句,insert语句(update语句、delete语句)

    SET NOCOUNT OFF--可有可无

    END

    GO

    SQL Server 触发器
  4. 4

    INSTEAD OF类的语法

    CREATE TRIGGER tf_name

    ON table

    INSTEAD OF INSERT --在表table中执行语句时,先执行此触发器的内容

    AS

    BEGIN

    DECLARE  @.. ;--声明变量

    select 

    insert

    ...

    --相应的select语句,insert语句(update语句、delete语句)

    END

    GO

    SQL Server 触发器
    END

插入型触发器的运用

 
  1.  

    --插入触发的应用,在表SL_NX中写入触发器,触发器名为SL_INSERT;

    接着定义分别定义了3个变量,通过在SL_NX表中插入的临时表inserted找到@SL_NO,@OS_NO;接着再通过@OS_NO关联MP_OS表找到@OS_ID;最后将OS_ID、OS_NO、SL_NO插入另一张表MP_OS_Z中。以下代码是可以直接复制到后台,然后改对应的名呀,表呀就可以用的。

    CREATE TRIGGER SL_INSERT --触发器名

    ON SL_NX --表名

    FOR INSERT --插入触发

    AS

    BEGIN

    --定义变量OS_ID,OS_NO,SL_NO;并且插入MP_OS_Z表中,

    DECLARE @OS_ID VARCHAR,@OS_NO VARCHAR,@SL_NO VARCHAR;

    --在inserted表中查询已经插入的记录信息

    SELECT @SL_NO=SL_NO,@OS_NO=PO_NO FROM inserted;--inserted是临时表,从插入临时表中查找对应的信息

    SELECT @OS_ID=OS_ID FROM MP_OS WHERE OS_NO=@OS_NO;--查找关联的信息

    INSERT INTO MP_OS_Z (OS_ID,OS_NO,SL_NO)VALUES (@OS_ID,@OS_NO,@SL_NO);--将相关信息插入另外一张表去

    END

    GO

    SQL Server 触发器
  2.  

    INSTEAD OF类插入触发器

    CREATE TRIGGER S_INSERT

    ON  SF_MN

    INSTEAD OF INSERT

    AS

    BEGIN

        DECLARE @CID VARCHAR(50),@REM VARCHAR

        SELECT @CID=ID,@REM=REM FROM INSERTED

        INSERT INTO MF_GJ (ID,REM) VALUES (@CID,@REM)

    END

    GO

    SQL Server 触发器
  3.  

    更新类触发器的应用

    CREATE TRIGGER ZL_UPDATE

    ON ZL_NX

    AFTER UPDATE

    AS

    BEGIN 

    UPDATE ZL_NX_Z SET REM=ZL_NX.REM FROM ZL_NX ZL INNER JOIN inserted i on ZL.ZL_NO=i.ZL_NO

    END

    GO

    SQL Server 触发器
  4.  

    删除类触发器的应用

    CREATE TRIGGER S_DELETE

    ON  SF_MN

    INSTEAD OF DELETE

    AS

    BEGIN

        DECLARE @CID VARCHAR(50) 

        --在deleted表中查询要删除的CID

        SELECT @CID=ID FROM DELETED 

        --删除对应表的记录

        DELETE TC_SM WHERE CID=@CID

        DELETE SF_MN WHERE CID=@CID

    END

    SQL Server 触发器
  5.  

posted @ 2019-08-16 14:07  临沂东哥  阅读(226)  评论(0编辑  收藏  举报