Bagaimana cara membuat pemicu yang memperbarui bidang tanggal dan bidang waktu setelah memodifikasi baris?

10

Saya telah membuat tabel testtabledi dalam database testbaseyang memiliki struktur berikut:

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

Namun, bagaimana saya menulis pemicu sehingga akan memperbarui baris tertentu yang telah dimodifikasi (atau diperbarui dengan informasi baru) dan mencatat tanggal modifikasi ke dalam expire_datebidang dan waktu modifikasi ke dalam expire_timebidang? (atau jika ini mungkin?)

Mendongkrak
sumber
Sudahkah Anda melihat bagaimana pemicu dibuat?
ya, saya telah melihat bagaimana pemicu dibuat (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) tetapi satu hal yang mengganggu saya adalah bagaimana cara memasukkan UPDATE pernyataan untuk baris yang sedang dipicu dengan mendapatkan kondisi yang benar seperti dalamWHERE id = Changed_Row_ID
Jack

Jawaban:

8

Ini akan cukup mudah tetapi saya sebenarnya akan merekomendasikan untuk mengubah logika perintah yang memasukkan / memperbarui data sehingga menambah informasi tambahan pada saat ini.

Namun, jika Anda ingin melanjutkan dengan pemicu, Anda dapat melakukan sesuatu seperti ini:

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  

Ini menggunakan INSERTEDtabel untuk mencari tahu product_nodari baris yang telah diubah / dibuat. Anda dapat mengetahui lebih lanjut tentang pemicu di tautan di bawah:

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

Saya harap ini membantu Anda.

Mr.Brownstone
sumber
Saya tidak pernah berpikir bahwa MS SQL sebenarnya akan membentuk tabel yang disebut inserted. Jadi, apakah itu berarti bahwa akan aman untuk tidak memiliki tabel database Anda sendiri untuk memiliki nama seperti inserteddan deleted?
Jack
1
Ya saya akan merekomendasikan tidak memiliki meja Anda sendiri dengan nama-nama ini hanya untuk menghindari kebingungan ;-)
Mr.Brownstone
pada halaman manual buat pemicu Anda dapat menemukan tautan ke halaman berikut yang menguraikan penggunaan tabel yang disisipkan / dihapus ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173