Server触发器创建

大旨提醒:本课程为大家介绍SQL
Server触发器创造、删除、订正、查看方法。

一:触发器是一种新鲜的仓库储存进程,它无法被显式地调用,而是在往表中插入记录�更新记录也许去除记录时被电动地激活。由此触发器可以用来促成对表施行复杂的完整性节制。

二:SQL
Server为每种触发器都制造了多个专项使用表:Inserted表和Deleted表。
那三个表由系统来保险,它们存在于内部存款和储蓄器中并不是在数据库中。那五个表的构造总是与被该触发器成效的表的布局相近。触发器执行完成后,与该触发器相关的那八个表也被删去。

Deleted表寄存由于举行Delete或Update语句而要从表中删除的兼具行。

Inserted表存放由于实行Insert或Update语句而要向表中插入的具有行。

三:Instead of 和 After触发器

SQL Server二〇〇三提供了二种触发器:Instead of 和After
触发器。这两种触发器的反差在于他们被激活的同:

Instead of触发器用于替代引起触发器施行的T-SQL语句。除表之外,Instead of
触发器也得以用于视图,用来扩充视图能够支撑的换代操作。

After触发器在叁个Insert,Update或Deleted语句之后实行,实行节制检查等动作都在After触发器被激活从前产生。After触发器只可以用来表。

四个表或视图的每一个校正动作(insert,update和delete卡塔尔国都足以有三个instead
of 触发器,八个表的种种改良动作都得以有三个After触发器。

四:触发器的试行进程

若果三个Insert�update只怕delete语句违反了自律,那幺After触发器不会举办,因为对节制的检查是在After触发器被触动早先爆发的。所以After触发器不可能超过限定。

Instead of
触发器能够取代激发它的操作来实施。它在Inserted表和Deleted表刚刚确立,此外任何操作还并没有产生时被履行。因为Instead
of 触发器在约束以前施行,所以它能够对节制实行一些预管理。

五:使用T-SQL语句来创建触发器

基本语句如下:

create trigger trigger_name

on {table_name | view_name}

{for | After | Instead of }

[ insert, update,delete ]

as

sql_statement

六:删除触发器:

基本语句如下:

drop trigger trigger_name

七:查看数据库中本来就有触发器:

— 查看数据库本来就有触发器

use jxcSoftware

go

select * from sysobjects where xtype=TR

— 查看单个触发器

exec sp_helptext 触发器名

八:校勘触发器:

基本语句如下:

alter trigger trigger_name

on {table_name | view_name}

{for | After | Instead of }

[ insert, update,delete ]

as

sql_statement

九:相关示例:

1:在Orders表中确立触发器,当向Orders表中插入一条订单记录时,检查goods表的商品状态status是或不是为1(正在收拾卡塔尔,是,则无法往Orders表参预该订单。

create trigger orderinsert

on orders

after insert

as

if (select status from goods,inserted

where goods.name=inserted.goodsname)=1

begin

print the goods is being processed

print the order cannot be committed

rollback transaction –回滚,制止插足

end

2:在Orders表建构三个插入触发器,在丰富一条订单时,收缩Goods表相应的物品记录中的库存。

create trigger orderinsert1

on orders

after insert

as

update goods set storage=storage-inserted.quantity

from goods,inserted

where

goods.name=inserted.goodsname

3:在Goods表建构删除触发器,完结Goods表和Orders表的级联删除。

create trigger goodsdelete

on goods

after delete

as

delete from orders

where goodsname in

(select name from deleted)

4:在Orders表创立二个更新触发器,监视Orders表的订单日期(OrderDate卡塔尔国列,使其不可能手工业校勘.

create trigger orderdateupdate

on orders

after update

as

if update(orderdate)

begin

raiserror( orderdate cannot be modified,10,1)

rollback transaction

end

5:在Orders表创建叁个插入触发器,保证向Orders表插入的货色名必供给在Goods表中必定将存在。

create trigger orderinsert3

on orders

after insert

as

if (select count(*) from goods,inserted where
goods.name=inserted.goodsname)=0

begin

print no entry in goods for this order

rollback transaction

end

6:Orders表创建二个插入触发器,保险向Orders表插入的货色音讯要在Order表中加多

alter trigger addOrder

on Orders

for insert

as

insert into Order

select inserted.Id, inserted.goodName,inserted.Number from inserted

发表评论

电子邮件地址不会被公开。 必填项已用*标注