我有一个包含列(id,title,contents,publishingDateTime,status)的表(tblMessage)。 publishingDateTime列是消息发布的日期。当它到达其publishingDateTime时,我想自动将列(状态)的值从(挂起到发布 - 或 - 从false到true)更改。如何在Sql Server 2005中确定的时间后更改列的值
在Sql Server 2005中可能如何?
我有一个包含列(id,title,contents,publishingDateTime,status)的表(tblMessage)。 publishingDateTime列是消息发布的日期。当它到达其publishingDateTime时,我想自动将列(状态)的值从(挂起到发布 - 或 - 从false到true)更改。如何在Sql Server 2005中确定的时间后更改列的值
在Sql Server 2005中可能如何?
可能最简单的方法是根本不改变数值。相反,使用计算列,有逻辑,如:
status as (case when publishingDateTime > getdate() then 'Published' else 'Pending' end)
这正好在create table
声明和解释here。
你也可以通过创建视图和通过视图对表格进行所有访问来做类似的事情(无论如何都是一个好主意)。
举个例子,我在创建表语句看起来像:
create table xxx (
-- all your columns go here
status as (case when publishingDateTime > getdate() then 'Published' else 'Pending' end)
)
对于一个视图,你会做这样的事情:
create view vw_SMS as
select sms.*,
(case when publishingDateTime > getdate() then 'Published' else 'Pending'
end) as status
from SMS
它实际上是更好的做法不使用*
在视图中,但要列出所有列。
+1就我个人而言,我喜欢带额外栏目的观点。 –
是的,当您始终可以确定它在运行时应该是什么时,不应该不断修改表中的值。我可能会选择计算列之前的视图选项,除非该列将在大多数查询中引用(在这种情况下,我会尽量确保它是确定性的,然后保留并可能对其进行索引)。 –
@Gordon Linoff ......这是我的表格创建脚本,我可以放置上面的代码? 'CREATE TABLE [dbo]。[SMS]( \t [ID] [INT] NOT NULL, \t [消息] [nvarchar的](50)COLLATE SQL_Latin1_General_CP1_CI_AS NULL, \t [publishingDateTime] [日期时间] NULL, \t [状态] [nvarchar的](50 )COLLATE SQL_Latin1_General_CP1_CI_AS NULL, 约束[PK_SMS] PRIMARY KEY CLUSTERED ( \t [ID] ASC )WITH(IGNORE_DUP_KEY = OFF)ON [PRIMARY] )ON [PRIMARY]' – wkhaksar
那么通常你的应用程序应该这样做恕我直言,
,但如果你只想让SQL服务器这样的事情
UPDATE tblMessage
SET status = 0
WHERE publishingDateTime <= GETDATE()
,然后创建一个运行这在sheduled时间代理作业。
你的意思是,你需要一个定时的基础上执行此更新? –
@凯利......当然是 – wkhaksar