目前需求:现有一张表,里面有字段isTop,endDate。有没有办法让数据库做个监控,如果endDate的字段值小于当前日期getDate()(代表时间过期),就把isTop的值改成false。
各位给点建议!!!

解决方案 »

  1.   


    --创建表
    if OBJECT_ID('TableA','u') is not null
    drop table TableA
    create table TableA
    (
    isTop bit,
    endDate datetime
    )
    go--触发器UpdateIsTop
    --更新时修改isTop
    if OBJECT_ID('UpdateIsTop','TR') is not null
    drop trigger UpdateIsTop
    go
    create trigger MotifyIsTop 
    on TableA
    for update
    as
    declare @FlagTime datetime
    select @FlagTime = endDate from inserted
    if(@FlagTime<GETDATE())
    begin
    update TableA set isTop=1 where endDate=@FlagTime
    end
    go
    --触发器InsertRecord
    --插入时修改isTop
    if OBJECT_ID('InsertRecord','TR') is not null
    drop trigger InsertRecord
    gocreate trigger InsertRecord 
    on TableA
    for insert
    as
    declare @FlagTime datetime
    select @FlagTime = endDate from inserted
    if(@FlagTime<GETDATE())
    begin
    update TableA set isTop=1 where endDate=@FlagTime
    end
    go--测试插入
    insert into TableA
    select 0,DATEADD(D,2, GETDATE())--结果
    --isTop  endDate
    --1      2012-12-06 13:28:51.283     //注意这条(isTop被值为1)
    --测试修改
    --修改前数据
    --isTop  endDate
    --1      2012-12-06 13:28:51.283
    --0      2012-12-10 13:30:34.540     //注意这条update TableA set endDate='2012-09-20 20:33:33' where endDate>GETDATE()--修改前数据
    --isTop  endDate
    --1 2012-09-20 20:33:33.000
    --1 2012-09-20 20:33:33.000          //注意这条(isTop被值为1)
      

  2.   

    触发器实现不了,不是要求这个有数据操作的时候更新数据,是要求有没有一种监控机制,自动根据endDate和getDate()的时间对比,实时改变isTop的值