SQL Server 触发器

2025-10-09 07:26:38

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

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

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

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

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、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、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 触发器

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 触发器

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢