2011-10-12 9 views
38

SQL Server tablosumdaki modifiedDate sütununu otomatik olarak güncelleyen bir tetikleyici oluşturmayı bilmek güzel olurdu:Nasıl yapılır: SQL Server 2008 ile otomatik güncelleştirme değiştirilme tarihi için tetik oluştur

Tablo ZamanEntry

Id (PK) 
UserId (FK) 
Description 
Time 
GenDate 
ModDate 

Tetik kodu:

+ TR_TimeEntry_UpdateModDate() 
+ TR_TimeEntry_InsertGenDate() 

Xzx27 güncellemesi için bir örnek iyi olurdu.

Şimdiden teşekkürler!

Julian

+0

bir tetikleyici olmak zorunda mı? – gbn

cevap

72

Benim yaklaşım:

  • GETDATE() değeriyle ModDate sütun üzerinde bir varsayılan kısıtlama tanımlamak - Bu

  • bir AFTER UPDATE tetiği zorunda INSERT durumda işler ModDate sütununu güncelleyin

  • 012 gibi

şey:

CREATE TRIGGER trg_UpdateTimeEntry 
ON dbo.TimeEntry 
AFTER UPDATE 
AS 
    UPDATE dbo.TimeEntry 
    SET ModDate = GETDATE() 
    WHERE ID IN (SELECT DISTINCT ID FROM Inserted) 
+4

Ayrıca, saat dilimi gereksinimlerinize bağlı olarak getUtcDate() işlevini dikkate almanız gerekir. – Rory

+35

Ve eğer birisi benim gibi merak ettiyse, bu kendiliğinden yinelemeli olarak kendini arayacaksa, normalde devre dışı bırakacağınız bir RECURSIVE_TRIGGERS veritabanı seçeneği vardır, bu da böyle bir tetikleyicinin kendisini çağırmasını engeller. http://msdn.microsoft.com/en-us/library/ms190739.aspx – Rory

+1

Anlamadım. Bunu önlemek için SET RECURSIVE_TRIGGERS özelliğini "ON" veya "OFF" yapmalı mıyım? – MarceloBarbosa