2011-10-12 27 views
38

Nó sẽ được tốt đẹp để biết làm thế nào để tạo ra một kích hoạt mà tự động cập nhật các cột modifiedDate trong SQL Server bảng của tôi:Làm thế nào để: Tạo kích hoạt cho bản cập nhật tự động ngày sửa đổi với SQL Server 2008

Bảng TimeEntry

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

trigger:

+ TR_TimeEntry_UpdateModDate() 
+ TR_TimeEntry_InsertGenDate() 

Một ví dụ để cập nhật ModDate sẽ nic e.

Cảm ơn trước!

Julian

+0

Liệu nó có phải là một kích hoạt? – gbn

Trả lời

72

cách tiếp cận của tôi:

  • xác định một hạn chế mặc định trên cột ModDate với một giá trị của GETDATE() - điều này xử lý các trường hợp INSERT

  • có một kích hoạt AFTER UPDATE để cập nhật cột ModDate

Cái gì như:

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

Cũng đáng xem xét 'getUtcDate() 'tùy thuộc vào yêu cầu múi giờ của bạn. – Rory

+35

Và nếu có ai đó tự hỏi, như tôi, liệu điều này có gọi là đệ quy tự gọi hay không, có tùy chọn cơ sở dữ liệu RECURSIVE_TRIGGERS mà bạn thường tắt để ngăn chặn một trình kích hoạt như thế này tự gọi. http://msdn.microsoft.com/en-us/library/ms190739.aspx – Rory

+1

Tôi không hiểu. Tôi nên làm 'SET RECURSIVE_TRIGGERS' thành' ON' hoặc 'OFF' để ngăn chặn điều này? – MarceloBarbosa

Các vấn đề liên quan