再次反驳一下楼上的观点 如果在触发器里加上一个
BEGIN
   WAITFOR TIME '00:00'
   EXECUTE update_all_stats
END
就可以实现了 
就是0点时候自动触发  就是楼主所说的半夜12点

解决方案 »

  1.   

    说不如做
    create trigger tr_a on 表A
    for insert
    as
    update 表b
    set b1=b1+1
    if (select top 1 a1 from inserted) = 0
    update 表b
    set b2=b2+1
    BEGIN
       WAITFOR TIME '00:00'
       insert 表b(b1,b2)
       values(0,0)
    END
      

  2.   

    --测试数据
    create table 表a
    (a1 int)
    create table 表b
    (b1 int,
     b2 int)
    insert 表b
    select 1,2 union all
    select 3,4 
    --建立触发器 把时间改下  比如现在22:34  你改到叫他22:35触发要不需要等好久
    create trigger tr_a on 表A
    for insert
    as
    update 表b
    set b1=b1+1
    if (select top 1 a1 from inserted) = 0
    update 表b
    set b2=b2+1
    BEGIN
       WAITFOR TIME '22:33'
       insert 表b(b1,b2)
       values(0,0)
    END
    --查一下 
    select * from 表a
    select * from 表b
    ----结果是-----
    /*
    表A
    a1
    0表B
    b1       b2
    2 3
    4 5
    0 0
    (所影响的行数为 1 行)
    (所影响的行数为 3 行)
    */
      

  3.   

    另外写一个存储过程也算是个好办法!!就相当于把我那个分开写也行!!
    ---第一个是插入的
    create trigger tr_a on 表A
    for insert
    as
    update 表b
    set b1=b1+1
    if (select top 1 a1 from inserted) = 0
    update 表b
    set b2=b2+1---第二个是等时间到再插入的
    create trigger tr_a1 on 表A
    for insert 
    if (select top 1 a1 from inserted) = 0
    BEGIN
       WAITFOR TIME '22:33'
       insert 表b(b1,b2)
       values(0,0)
    END
      

  4.   

    WAITFOR TIME '00:00' ?抬杠不是?在触发器里这样做会出问题吧?嘿嘿嘿我觉得我是清楚楼主意思的,可我又懒得写代码,怕别人不清楚,所以要求楼主说清楚点。表B应该有一个日期字段。是吧,楼主?
      

  5.   

    要求1,2很简单啊,楼上几位已经给出正确答案了要求3:
    服务器系统时间到达午夜12点后,自动在表B中增加一条记录,并令表B的字段B1,B2的值为0这个强烈建议建一个job来做,job就是做这个的,放到触发器里执行非常不对头。
      

  6.   

    定时执行:
    ——(1)启用SQL Server Agent服务,用SQL作业的调度实现;
    ——(2)WAITFOR TIME '00:00' EXEC ……也行啊!均可。条条大道通罗马!