2012-03-01 7 views
11

[ID、Name、LastUpdated]の3つのフィールドを持つテーブルがあります。
LastUpdatedは「のGetDate(のデフォルト値を持っている)ので、新しいレコードが追加されたとき、それは自動的に埋めます。T-SQLトリガーアップデート

私が代わりにテーブルの上にUPDATEを実行すると、私はこのフィールドは、現在のGetDateに自身をリセットしたいと思います。()

CREATE TRIGGER dbo.Table1_Updated 
    ON dbo.Table1 
    AFTER UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE dbo.Table1 SET LastUpdated = GETDATE() 
END 
GO 

しかし、私はWHERE句を持っていないので、すべてのレコードが更新されます

QUESTION:私は更新されたレコードのIDの値になるだろう
UPD ATEトリガー?

私はトリガー内のテーブルのフィールドを更新していますが、新しいトリガーイベントを再コールするということはありますか?

+0

@Damien_The_Unbeliever確かに私はそれを理解しますが、このスレッドは私が概念を理解するためのほんの一例です。これは実際のコードではありません。 –

答えて

21

INSERTEDから、テーブルINSERTEDはINSERT、UPDATEトリガーに共通です。

CREATE TRIGGER dbo.Table1_Updated 
ON dbo.Table1 
FOR INSERT, UPDATE /* Fire this trigger when a row is INSERTed or UPDATEd */ 
AS BEGIN 
    UPDATE dbo.Table1 SET dbo.Table1.LastUpdated = GETDATE() 
    FROM INSERTED 
    WHERE inserted.id=Table1.id 
END 
+0

だからTSQLがちょうどどのフィールドでもUPDATEを行っていても、トリガーの中でInserted仮想テーブルを探しますか?ちょっと、私は挿入する必要があります...私は更新が必要な場合でも? –

1
Update table1 
set LastUpdated = getdate() 
from inserted i, table1 a 
where i.pk1 = a.pk1 
+0

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=57227 –