2011-10-14 24 views
5

Hiện tại tôi có một bảng Mục và một bảng ItemWaste. Cả hai bảng sẽ có một số trường, chẳng hạn như: Tên, Số lượng, vv Nhưng bảng ItemWaste sẽ có thêm một trường nữa, đó là TimeWasted. Tôi muốn tự động chèn mục DELETED từ bảng Item vào bảng ItemWaste, và đồng thời chèn thời gian xóa vào trường TimeWasted.Trình kích hoạt máy chủ SQL - Chèn bản ghi đã xóa vào bảng khác với thời gian hủy

Tôi không biết làm thế nào để làm điều này, là nó sử dụng kích hoạt ???

Hy vọng có thể nhận được một số trợ giúp ở đây ... Đánh giá cao bất kỳ thông tin phản hồi ... Cảm ơn ....

+0

chỉ cần tạo trình kích hoạt – Bala

Trả lời

8

Chắc chắn - không phải vấn đề.

Bạn cần một cơ bản AFTER DELETE cò - một cái gì đó như thế này:

CREATE TRIGGER trg_ItemDelete 
ON dbo.Item 
AFTER DELETE 
AS 
    INSERT INTO dbo.ItemWaste(Name, Amount, TimeWasted) 
     SELECT d.Name, d.Amount, GETDATE() 
     FROM Deleted d 

Đó là tất cả những gì! Một điểm cần nhớ: trình kích hoạt được gọi là một lần cho mỗi lô - ví dụ: nếu bạn xóa 100 hàng cùng một lúc, nó sẽ được gọi là sau khi và bảng giả Deleted sẽ chứa 100 hàng. Trình kích hoạt là không phải được gọi một lần cho mỗi hàng (một quan niệm sai lầm phổ biến).

+0

Nó hoạt động! Cám ơn rất nhiều! – shennyL

+0

Btw, tôi không thực sự rõ ràng những gì bạn có nghĩa là một lần mỗi lô, nếu tôi xóa 3 hàng, bảng đã xóa vẫn sẽ có 3 hàng nghi thức? – shennyL

+0

@ user834754: yes - nếu bạn có câu lệnh SQL xóa 3 hàng - trình kích hoạt của bạn sẽ bị kích hoạt ** một lần ** nhưng bảng giả 'Deleted' sẽ chứa 3 hàng và 3 hàng được chèn vào' ItemWaste của bạn 'bảng. –

0

Vâng, đơn giản bằng cách ghi chép lại một kích hoạt bạn có thể insert liên tiếp khi một hành động delete được thực hiện trong bảng khác, hãy xem Triggers

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