web-dev-qa-db-ja.com

行の変更時に日付フィールドと時間フィールドを更新するトリガーを作成するにはどうすればよいですか?

次の構造を持つデータベースtesttable内にテーブルtestbaseを作成しました。

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

ただし、変更された(または新しい情報で更新された)特定の行を更新し、expire_dateフィールドに変更日を記録し、expire_timeフィールドに変更時間を記録するようにトリガーを作成するにはどうすればよいですか? (またはこれが可能かどうか)

10
Jack

かなり簡単ですが、実際には、データを挿入/更新するコマンドのロジックを変更して、この時点で追加情報を追加することをお勧めします。

ただし、トリガーを続行したい場合は、次のようにすることができます。

create trigger my_trigger
on my_table
after insert, update
as
begin
declare @dt datetime = getdate();
update a
set expire_date = CONVERT(DATE, @dt, 101),
    expire_time = CONVERT(TIME, @dt)
from my_table as a
join inserted as b 
on a.product_no = b.product_no; 
end
go  

これはINSERTEDテーブルを使用して、変更/作成された行のproduct_noを見つけます。トリガーについて詳しくは、以下のリンクをご覧ください。

http://msdn.Microsoft.com/en-us/library/ms189799.aspx

これがお役に立てば幸いです。

8
Mr.Brownstone