日期:2014-05-18  浏览次数:20628 次

这个触发器怎么实现?检测是否对记录进行了相同修改,有点难
现在根据表里面的字段   OpState来判定是否执行一段存储过程
修改OpState为1或者增加一条记录并且该OpState为1就执行存储过程

目前修改和插入的触发器我都基本实现了,是分开写的,但对于修改的触发器1个大Bug,那就是如果原来字段为1,现在还是写1,那就又执行一次存储过程,由于这个存储过程是大批量写数据,那么假如客户端不小心连续执行了更改字段的命令,那么就连续执行了触发器,或者多执行了一次,引起问题,代码如下,大家帮助看看
我现在里面是不允许OpState列同时有2个或以上的1

CREATE   trigger   Tr_Ra   on   Log_RefreshData_Table
for   update
as  
begin
      declare   @Year   int
      declare   @Month   int
      declare   @OpState   int
      declare   @OpState2   int
      declare   @Num   int
      if     Update(OpState)    
      Begin
            select   @Num   =     count(*)   from   Log_RefreshData_Table   where   OpState=1
            if   @Num=0
                  Begin  
                        Insert   into   TestInfo(Msg,TryTime)   Values( '没有可执行的任务......   OpState <> 1 ',Getdate())
                        return
                  End
           
            select   @OpState   =     OpState     from   Log_RefreshData_Table   where     ID   =   (select   ID   from   Inserted)          
            select   @OpState2   =     OpState     from   Log_RefreshData_Table   where     ID   =   (select   ID   from   Inserted)          
            select   @Num   =     count(*)   from   Log_RefreshData_Table   where   OpState=1  
/***********功能未实现,不明白为什么**************/
            if   @Num=1   and   @OpState=@OpState2--上次进行的本月导入尚未结束,取消本次指令
                  Begin  
                        --RollBack
                        Insert   into   TestInfo(Msg,TryTime)   Values( '本月批量导入正在进行...... '+str(@OpState)+str(@OpState),Getdate())
                        return
                  End
/***************************************/
            if   @Num> 1
                  Begin  
                        RollBack
                        Insert   into   TestInfo(Msg,TryTime)   Values( '某次批量导入正在进行,请等待执行...... ',Getdate())
                        return
        &n