新闻  |   论坛  |   博客  |   在线研讨会
触发器在系统中应用
luker | 2017-02-13 16:25:48    阅读:233   发布文章

机房收费系统,在退卡操作时,要删除学生信息表中的数据还要将退还金额信息写到退卡记录表中,两条SQL语句就能实现了,但是还没有更简单的方法呢,想到了再数据库视频中学到的触发器,一个操作引起其他操作。

     

    重新学习了触发器这部分内容。

    概括一下触发器,顾名思义就是在对数据库操作时引起的另外的操作,这里操作只包括(update delete inserte),用触发器解决的问题是向一个表中写入(删除)数据时,同时将写入的信息保存在另一个表中,也可以是在写入(删除)数据时,另外一个表中的数据跟着变化。这些都可以用触发器实现。


   下面说说自己实现用触发器实现退卡操作的。

    按照触发器的特点,只需要在删除的学生基本信息表下建立一个触发器,编写好写入到退卡记录中的语句,在学生表中,执行删除时,就会自动将要删除的记录写入退卡记录中,这样实现了的确是简单哈。

 

    问题来啦。学生基本信息表结构和退卡记录表的结构不一样啊,写入的时候,一方面将要删除的信息的卡号,余额,操作者字段内容写入,还要获得系统当时的时间,日期字段写入。这下麻烦啦。

    继续找资料吧,网上的好多信息说“触发器操作的表结构一致”,不一致的话,就不能用了么,就在我快要放弃触发器的时候,实现了不同表结构的操作。过程是复杂的,结果是简单的。代码仅供参考:

[sql] view plain copy
 print?
  1. ALTER TRIGGER [dbo].[delStudent]   
  2.    ON  [dbo].[T_Student]  
  3.    for DELETE  
  4. AS   
  5. BEGIN  
  6.     insert into T_CardDelete(cardNo,delData,delTime ,cardCash ,cardManager )values((select cardno from deleted),convert(varchar(15),GETDATE(),103),convert(varchar(15),GETDATE(),108),(select cardCash from deleted),(select stManager from deleted))  
  7. end  

代码解释:


(cardNo,delData,delTime ,cardCash ,cardManager )是要插入表中的字段名称

values后面的是插入的内容

(select cardno from deleted) 是在删除表中得到的卡号字段,对应记录表中的卡号字段

convert(varchar(15),GETDATE(),103) 获取系统日期字段,填进去的其他字段,当然如果是固定的字符串,直接写出来,就行啦

    触发器还可以起到限制作用,如删除数据库时提示,保护原始数据等。这些功能在以后做系统时再用,先了解着。

触发器很好用,但是不能滥用。在数据特别多的时候,不适合用触发器。


    说明:for=after 是在执行后才触发的

               instead of代替sql语句,执行的是触发器而不是之前的sql语句

参与讨论
登录后参与讨论
推荐文章
最近访客