设为首页 加入收藏

TOP

机房收费系统之触发器的使用
2015-11-21 01:36:21 来源: 作者: 【 】 浏览:0
Tags:机房 收费系统 触发器 使用

机房重构中,有很多功能的实现涉及到对数据库中多张表进行操作。比方说结账,结账成功之后实现的功能有:1、修改卡表的结账状态。2、修改充值表的结账状态。3、修改退卡表的结账状态。4、删除卡表中不使用并且已结账的卡的信息。实现这些功能并不难,只要在D层中重新定义这些方法就OK了,但是这样的效率并不高。有没有一种既能实现这些功能又很高效的方法呢?这就涉及到对数据库中触发器的使用了。

触发器

  一? 触发器是一种特殊的存储过程,它不能被显式地调用,而是在往表中插入记录、更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。


  二? SQL Server为每个触发器都创建了两个专用表?Inserted表和Deleted表。这两个表由系统来维护?它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后?与该触发器相关的这两个表也被删除。 Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。


  三?常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。after(for) 表示执行代码后,执行触发器;instead of 表示执行代码前,用已经写好的触发器代替你的操作。

四:语法

  create trigger 触发器的名字   on 操作表

  for|after         instead of

  update|insert|delete

  as

  SQL语句
下面是针对结账的功能自己写的一个触发器,它不仅能帮助我实现功能,也能避免在D层中写过多的代码!

应用:

CREATE TRIGGER triggerc_UpdateB
on Card_info  after 
update 
as 
if update ([ICheck])
 update ReturnCard_info set ICheck='已结账'where ICheck='未结账' and UserID=(select top 1  UserID from  INSERTED )
 update Recharge_info set ICheck='已结账'where ICheck='未结账' and UserID=(select top 1  UserID from  INSERTED )
 delete from Card_info where ICheck='已结账' and UState='不使用'

总结:

之前学习数据库的时候,了解了触发器。当时没有去应用这个知识,重构中用到了才发现它的功能是如此之强大。果然,实践出真知。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇结构化、半结构化和非结构化数据 下一篇数据库设计--实体关系图(ERD)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: