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


10

次の構造を持つ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ですか?(またはこれが可能かどうか)


トリガーがどのように作成されるかを見ましたか?

はい、トリガーがどのように作成されるかを見ました(参照:msdn.microsoft.com/en-us/library/ms189799 ( v=sql.105 ) .aspx)。次のように条件を正しく取得することでトリガーされている行のステートメントWHERE id = Changed_Row_ID
Jack

回答:


8

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

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

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

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


MS SQLが実際にと呼ばれるテーブルを形成するとは思っていませんでしたinserted。では、独自のデータベーステーブルにinsertedand などの名前を付けなくても安全であることを意味しますdeletedか?
Jack

1
はい、混乱を避けるために、これらの名前で独自のテーブルを作成しないことをお勧めします;-)
Mr.Brownstone

トリガーのマニュアルページを作成するには、あなたが挿入/削除されたテーブルの使用(記載する以下のページへのリンクを見つけることができますmsdn.microsoft.com/en-us/library/ms191300.aspx
miracle173
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.