机房重构之退卡——触发器增强版

来源:互联网 发布:网络考试系统破解版 编辑:程序博客网 时间:2024/06/16 00:04

 I have to say that success always make people happy

          之前自己在退卡窗体的时候,发现自己需要用到触发器,然后就在网上荡阿荡的,找到了合适的代码照着敲了,遇到了一点问题,但是立马解决了,在SQL里面也执行成功了,我天真的以为在D层写一句(下面的那句)delete语句就可以同时删除cardbalance表里面的卡和在cancelcard表中增加一条记录,没想到怎么也不成功,触发器似乎没被触发一样,后来在网上找问题啊找问题,最终才发现,还是得看懂触发器每段话的意思。

 string sql = "delete from CardBalance where CardNumber=@CardNumber";
     如果不看懂触发器的意思就写,那么就是容易出错的,我上一篇的博客基本是对的,但是造成我的触发器没有触发成功的原因就是我的表写错了,下面我给我自己分析一下哈,后退!我要开始表演了

              


    然后还有一点值得注意,就是下面这点:

             

     That‘s all……of course not the end


接下来就说一下为什么是增强版了

   我终于弄成功之后发现,如果我只删除了Card表中的卡的记录和在销卡记录表中添加一条信息,那么就会出现信息之间的错误,容易读脏数据。因此必须在增加销卡记录信息的时候再删除Student表和上下机表中的相应记录,因此在SQL中写的触发器还要增加一段话,下面是完整的代码 

   

USE[Jifang]Go/******boject:Trigger [].[] Script Date :     ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO/******CREATE TRIGGER [dbo].[myTrigger]******/ALTER TRIGGER canceltrigger  --创建触发器,触发器的名字为    ON [dbo].[CardBalance]AFTER DELETEASBEGIN   --声明变量   declare @CardNumber int,           @StuNumber varchar(MAX),   @StuName varchar(MAX),   @Balance money,  @CancelTime varchar(MAX),   @CancelDate varchar(MAX)select @CardNumber=CardNumber FROM deleted select @StuNumber =StuNumber FROM deleted select @Balance =Balance FROM deleted set @CancelDate  = CONVERT (date  ,GETDATE(),111) --获取当前日期set @CancelTime  = CONVERT (time ,GETDATE (),108)--获取当前时间if @@ROWCOUNT >0 --受影响的行数BEGIN Insert into dbo.CancelCard (CardNUmber ,StuNumber  ,Balance ,CancelTtime ,CancelDate )  values (@CardNumber ,@StuNumber ,@Balance ,@CancelTime ,@CancelDate ) delete  from dbo.OnOffline where CardNumber=@CardNumber ; delete from dbo .Student where CardNum =@CardNumber ;   ENDEND

    That's all and goodbye

    

        

原创粉丝点击