0

列 (id、タイトル、コンテンツ、publishingDateTime、ステータス) を持つテーブル (tblMessage) があります。PublishingDateTime 列は、メッセージが公開される日付です。列 (ステータス) の値を、publishDateTime に到達したときに (保留中から公開済み - または false から true) に自動的に変更したいと考えています。

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サーバーにこのようなものをさせたいだけなら

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

次に、スケジュールされた時間にこれを実行するエージェント ジョブを作成します。

于 2013-02-03T18:14:38.737 に答える
0

公開日に基づいてステータス列を更新するストアド プロシージャを実行する Transact-SQL ジョブを作成できます。

こちらのドキュメントを参照してください:

于 2013-02-03T18:15:48.653 に答える