电脑安全

您当前的位置:主页 > 电脑安全 >

SQL Server触发器创建、删除、修改、查看-网络编程

来源:[db:来源]标题:   触发器    编辑:电脑技术全能网 时间:2019-09-18 12:30

原标题:SQL Server触发器创建、删除、修改、查看-网络编程
   中心提醒:本教程为各人先容SQL Server触发器创立、删除、修正、检查方式。  一:触发器是一种特别的存储进程,它不能被显式地挪用,而是在往表中拔出记载�更新记载或许删除记载时被主动地激活。以是触发器能够用来完成对表实行庞杂的完全性束缚。  二:SQL Server为每个触发器都创立了两个公用表:Inserted表和Deleted表。这两个表由体系来保护,它们存在于内存中而不是在数据库中。这两个表的构造老是与被该触发器感化的表的构造雷同。触发器履行 实现后,与该触发器相干的这两个表也被删除。  Deleted表寄存因为履行Delete或Update语句而要从表中删除的全部行。  Inserted表寄存因为履行Insert或Update语句而要向表中拔出的全部行。  三:Instead of 和 After触发器  SQL Server2000供给了两种触发器: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

上一篇:MSSQL Server的事务日志简介一览-网络编程

下一篇:没有了