日期:2014-05-17  浏览次数:20572 次

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

--创建表
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
go

create 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)