首页 理论教育 使用触发器创建临时工作表:INSERTED、DELETED

使用触发器创建临时工作表:INSERTED、DELETED

时间:2023-10-21 理论教育 版权反馈
【摘要】:不能对视图定义AFTER触发器。不能为DDL触发器指定INSTEAD OF触发器。(二)INSERTED表和 DELETED表在使用DML触发器的过程中,SQL Server提供了两个临时的用于记录更改前后变化的表: INSERTED表和DELETED表。这两张表存在高速缓存中,它们的结构与创建触发器的表结构一样。这两个临时工作表只用在触发器代码中。

使用触发器创建临时工作表:INSERTED、DELETED

(一)创建DML触发器

创建DML触发器的SQL语法如下:

CREATE TRIGGE触发器名

ON表名或视图名

|FOR |AFTER|INSTEAD OF|

|INSERT[,]|UPDATE[,]|IDELETE|

[WITH ENCRYTION]

AS

[IF UPDATE(列名)[AND |OR |UPDATE(列名)][…n]

T-SQL语句

参数说明如下。

1.FOR|AFTER

指定DML触发器仅在触发SQL语句中指定的所有操作都已成功执行时才被激发。所有的引用级联操作的约束(如外键)检查也必须在激发此触发器之前成功完成。如果仅指定FOR关键字,则AFTER为默认值。不能对视图定义AFTER触发器。

2.INSTEAD OF(www.xing528.com)

指定执行DML触发器而触发SQL语句,因此其优先级高于触发语句的操作。不能为DDL触发器指定INSTEAD OF触发器。

3.INSERT[,]|UPDATE[,]| DELETE

用来指明哪种数据操作将激活触发器。

4.WITH ENCRYTION

对CREATE TRTGGER语句的文本进行加密处理,并防止将触发器作为 SQL Server复制的一部分进行发布。

5.IF UPDATE(列名)

测试在指定的列上进行的INSERT或UPDATE操作,不能用DELETE操作,可以指定多列。因为已经在N子句中指定了表名,所以在IF UPDATE子句的列名前不要包含表名。若要测试在多个列进行的INSERT或UPDATE操作,要分别单独指定UPDATE(列名)子句。

(二)INSERTED表和 DELETED表

在使用DML触发器的过程中,SQL Server提供了两个临时的用于记录更改前后变化的表: INSERTED表和DELETED表。这两张表存在高速缓存中,它们的结构与创建触发器的表结构一样。

每个触发器可以使用两个特殊的临时工作表:插入表(INSERTED)和删除表(DELETED)。这两张表是逻辑表并且由系统管理,存储在内存中,不存储在数据库中,因此不允许用户直接对其修改。它们的结构和该触发器的作用相同,主要用来保存因为用户操作而被影响到的原数据的值或新数据的值。这两个临时工作表只用在触发器代码中。其中:

1.INSERTED表保存了INSERT操作中新插入的数据和UPDATE操作中更新后的数据。

2.DELETED表保存了DELETE操作中删除的数和UPDATE操作中更新前的数据。在触发器中对INSERTED和DELETED这两个临时工作表的使用方法同一般基本表一样。可以通过对这两个临时工作表所保存的数据进行分析,来判断所执行的操作是否符合约束要求。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈