0

我有一个包含列(id、title、contents、publishingDateTime、status)的表(tblMessage)。publishingDateTime 列是消息发布的日期。我想在到达其发布日期时间时自动将列(状态)的值从(待发布 - 或 - 从假变为真)更改。

在 Sql Server 2005 中怎么可能?

4

3 回答 3

4

可能最简单的方法是根本不更改值。相反,使用计算列,其逻辑如下:

status as (case when publishingDateTime > getdate() then 'Published' else 'Pending' end)

这在create table声明中并在此处进行了解释。

您还可以通过创建视图并通过视图对表进行所有访问来执行类似的操作(无论如何这通常是个好主意)。

例如,我的 create table 语句如下所示:

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

实际上最好不要*在视图中使用,而是列出所有列。

于 2013-02-03T18:13:59.000 回答
0

好吧,通常你的应用程序应该这样做恕我直言,

但是如果你只是想让 sql server 像这样

UPDATE tblMessage
SET status = 0
WHERE publishingDateTime <= GETDATE()

然后创建一个在预定时间内运行它的代理作业。

于 2013-02-03T18:14:38.737 回答
0

您可以创建一个 Transact-SQL 作业,该作业将执行一个存储过程,该存储过程将根据发布日期更新您的状态列。

请参阅此处的文档:

于 2013-02-03T18:15:48.653 回答