Làm cách nào để tạo một trình kích hoạt cập nhật trường ngày và trường thời gian khi sửa đổi hàng?


10

Tôi đã tạo một bảng testtablebên trong cơ sở dữ liệu testbasecó cấu trúc sau:

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

Tuy nhiên, làm cách nào để tôi viết trình kích hoạt sao cho nó sẽ cập nhật hàng cụ thể đã được sửa đổi (hoặc cập nhật thông tin mới) và ghi lại ngày sửa đổi vào expire_datetrường và thời gian sửa đổi vào expire_timetrường? (hoặc nếu điều này là có thể?)


Bạn đã xem làm thế nào một kích hoạt được tạo ra?

vâng, tôi đã xem xét cách kích hoạt được tạo ra (Ref: msdn.microsoft.com/en-us/l Library / ms189799 (v = sql.105 ). tuyên bố cho hàng đang được kích hoạt bằng cách lấy điều kiện chính xác như trongWHERE id = Changed_Row_ID
Jack

Câu trả lời:


8

Nó sẽ khá dễ dàng nhưng tôi thực sự khuyên bạn nên thay đổi logic của lệnh đang chèn / cập nhật dữ liệu để nó thêm thông tin bổ sung vào thời điểm này.

Tuy nhiên, nếu bạn muốn tiến hành kích hoạt, bạn có thể làm một cái gì đó như thế này:

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  

Điều này sử dụng INSERTEDbảng để tìm ra product_nocác hàng đã được thay đổi / tạo. Bạn có thể tìm hiểu thêm về các kích hoạt tại liên kết dưới đây:

http://msdn.microsoft.com/en-us/l Library / ms189799.aspx

Tôi hy vọng cái này sẽ giúp bạn.


Tôi chưa bao giờ nghĩ rằng MS SQL thực sự sẽ tạo thành một bảng được gọi là inserted. Vì vậy, điều đó có nghĩa là sẽ an toàn nếu không có bảng cơ sở dữ liệu của riêng bạn để có tên như inserteddeleted?
Jack

1
Có, tôi khuyên bạn không nên có các bảng của riêng mình với các tên này chỉ để tránh nhầm lẫn ;-)
Mr.Brownstone

trên trang hướng dẫn kích hoạt tạo, bạn có thể tìm thấy một liên kết đến trang sau mô tả việc sử dụng các bảng được chèn / xóa ( msdn.microsoft.com/en-us/l
Library / ms191300.aspx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.