b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

SQLServerDML触发器的AFTER触发器

电脑杂谈  发布时间:2020-04-08 13:42:16  来源:网络整理

dml触发器_jk触发分相器_ddl dml

根据DML触发器发生的时间以及编写触发器的语言,可以将其分为AFTER触发器,INSTEAD OF触发器和CLR触发器. 执行INSERT,UPDATE或DELETE语句操作之后以及INSTEAD OF触发器和约束之后,将触发AFTER触发器. INSTEAD OF在处理约束之前触发,因此您可以使用INSTEAD OF中的其他语句替换INSERT,UPDATE和其他触发触发器的语句. 同样,您可以基于一个或多个基本表为视图定义INSTEAD OF触发器,从而扩展视图可以支持的更新类型. CLR触发器可以是AFTER触发器或INSTEAD OF触发器,也可以是DDL触发器.

应注意,在创建DML触发器时​​,不能使用以下语句:

ALTER DATABASE创建DROP

LOAD DATABASE LOAD LOG RECONFIGURE

还原还原日志

14.1.1之后触发

一个表中可以有多个AFTER触发器,只要它们的名称不同即可. 每个触发器只能应用于一个表,但是一个触发器可以同时应用于表的三个用户操作(UPDATE,INSERT和DELETE).

以下语句创建一个PriTrigger表和一个DetailTable,其中PriTrigger表用于存储销售订单的数量和数量,而DetailTable表用于存储每个订单中的产品信息. 将为PriTrigger表的DELETE操作创建一个名为PriTrigger的触发器. 删除PriTrigger表中的订单信息后,触发器将删除DetailTable表中的订单产品信息.

使用AdventureWorks;

jk触发分相器_ddl dml_dml触发器

GO

-创建一个主表来存储销售订单编号和金额

创建表PriTable

(OrderID int IDENTITY(1,1),OrderTotal money);

GO

-创建详细列表以存储每个订单中的产品信息

创建表格明细表

(OrderID int,ProductID int,ProductCount int NOT NULL,价格);

GO

jk触发分相器_ddl dml_dml触发器

-将订单信息插入主表

插入PriTable值(2100.00);

插入PriTable值(1000.00);

-将订单的产品信息插入详细列表中

插入到明细表值(1,1,10,110.00);

插入到明细表值(1,2,10,100.00);

插入到明细表值(2,2,10,100.00);

GO

-为PriTrigger表创建触发器

ddl dml_dml触发器_jk触发分相器

创建触发器PriTrigger

在PriTable上

删除后

AS

从DetailTable中删除

订单ID输入(选择订单ID

FROM已删除);

PRINT N'DetailTable中的相关数据已删除'-此语句仅用于演示目的,此类信息语句不应在触发器中使用

定义触发器时,触发器名称紧跟CREATE TRIGGER关键字,ON子句指定要在其中创建触发器的基表. AFTER子句(也可以使用FOR代替具有相同功能的AFTER关键字)来激活触发器的操作语句,并且可以同时指定多个操作语句. 例如,“ AFTER DELETE,INSERT”表示在表上执行DELETE,INSERT语句时激活了触发器. 在AS关键字之后,指定触发器执行哪种操作.

jk触发分相器_ddl dml_dml触发器

请注意WHERE条件的IN子句中的Deleted关键字. 当从PriTrigger表中删除一行时,删除的行将被复制到名为Deleted的临时内存表中. 如果在执行INSERT语句时为表指定触发器dml触发器,则在表中插入一行时,新行还将添加到名为Inserted的临时内存表中. 如果为表的UPDATE语句指定触发器dml触发器,因为更新事务类似于删除操作之后的插入操作. 因此,将旧行复制到Deleted表,然后将新行复制到触发器表和Inserted表.

已删除和已插入的表由SQL Server自动创建和管理. 这些表的结构与定义触发器的基本表的结构相同.

执行以下语句,从PriTable表中删除具有OrderID 1的行. 此时,触发器将自动删除DetailTable表中的相关行. 结果和消息如图14-1所示.

从PriTable中删除,其中OrderID = 1;

SELECT * FROM PriTable;

SELECT * FROM DetailTable;

图14-1删除PriTable表中具有OrderID 1的行时获得的结果和消息

如果执行以下语句,请准备从PriTable表中删除具有OrderID 3的行. 由于PriTable表中没有此类行,因此不会成功删除该行. 尽管删除不成功,但是您仍然可以在消息窗口中看到触发器的PRINT语句发送回的信息. 这意味着即使该语句不影响表中的行,触发器也会被激活. 在没有成功删除的情况下,“已删除”表是一个空表.

从PriTable中删除,其中OrderID = 3;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-168273-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...