回 帖 发 新 帖 刷新版面

主题:如何创建这个UPDATE的触发器!

我有一个表 tongji 表每分钟 tongji 表都确认至少会发生一个UPDATE 事件(有时候甚至一分钟会发生几百或者上千次的update事件) ,每天23:55分我想让触发器执行一个操作,但是只执行一次!(请注意,要求是每一天执行一次且只执行一次)
 那么这个触发器应该怎么写呢?
我是这样写的, 但是感觉不好,我增加了一个FLAG  表。里面有一个FLAG 字段,默认写了一个 0 进去。

IF  EXISTS (select 1 from sysobjects where name='trig_tongji')
    drop trigger trig_tongji
go

    ON tongji
    as 
        declare @bz
        set @bz=0

        if DATENAME ( hour , getdate() )>=23 and DATENAME ( minute , getdate() )>=55 
            begin 
                select @bz=flag from flag
                if @bz=0
                    begin 
                        update flag set flag=1
                        exec proc_cf  --执行一次存储过程
                    end 
            end 
        else 
            update flag set flag=0
        
    GO
    

回复列表 (共4个回复)

沙发

if DATENAME ( hour , getdate() )>=23 and DATENAME ( minute , getdate() )>=55 
            begin 
                select @bz=flag from flag
                if @bz=0
                    begin 
                        update flag set flag=1
                        exec proc_cf  --执行一次存储过程
                    end 
            end 
        else 
            update flag set flag=0

**********************************************************
上面内容可以简化一下!
/*如果符合我的条件进行替换*/
                        update flag set flag=1 WHERE DATENAME ( hour , getdate() )>=23 and DATENAME ( minute , getdate() )>=55 
              .....................
              ............
              ......

--注释:如果你替换的内容加个标志即可解决只替换一次的问题.比如替换的可以将标志字段值改写成7.把判断加到上面我给你语句的WHERE 之后.问题就解决了!

板凳

我主要目的是要保证每天 23点55 分以后只执行一次 exec proc_cf  的操作! 并不是去update 那个 flag  
  我使用 flag 目的 是保证exec proc_cf 不会被多次执行,因为UPDATE 每分钟可以会发生多次,那么触发器可能会执行多次!

只是我觉得我的代码写得好象不够简练 ,尤其是 else update …… 
会造成 23点55分之前,数据库不停的 update flag set flag=0 这样的效率可能很低!(有时候数据库每分钟可能会发生上千次的update事件)

3 楼

这个是不能用触发器实现的
用一个作业就能轻松实现

4 楼

请问怎么写 “作业”  的SQL 语句啊? 我购买的是万维网一个 10M 的SQL数据库, 有 .dbo的权限 ! 
  我可以通过SQL 语句实现作业吗!

我来回复

您尚未登录,请登录后再回复。点此登录或注册