列 (id、タイトル、コンテンツ、publishingDateTime、ステータス) を持つテーブル (tblMessage) があります。PublishingDateTime 列は、メッセージが公開される日付です。列 (ステータス) の値を、publishDateTime に到達したときに (保留中から公開済み - または false から true) に自動的に変更したいと考えています。
Sql Server 2005 でどのように可能ですか?
列 (id、タイトル、コンテンツ、publishingDateTime、ステータス) を持つテーブル (tblMessage) があります。PublishingDateTime 列は、メッセージが公開される日付です。列 (ステータス) の値を、publishDateTime に到達したときに (保留中から公開済み - または false から true) に自動的に変更したいと考えています。
Sql Server 2005 でどのように可能ですか?
おそらく最も簡単な方法は、値をまったく変更しないことです。代わりに、次のようなロジックで計算列を使用します。
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
ビューでを使用するのではなく、*
すべての列を一覧表示することをお勧めします。
通常、アプリケーションはこれを実行する必要があります。
しかし、SQLサーバーにこのようなものをさせたいだけなら
UPDATE tblMessage
SET status = 0
WHERE publishingDateTime <= GETDATE()
次に、スケジュールされた時間にこれを実行するエージェント ジョブを作成します。
公開日に基づいてステータス列を更新するストアド プロシージャを実行する Transact-SQL ジョブを作成できます。
こちらのドキュメントを参照してください: