Satır değiştirildikten sonra tarih alanını ve saat alanını güncelleyen bir tetikleyici nasıl oluşturulur?


10

Aşağıdaki yapıya sahip testtableveritabanı içinde bir tablo oluşturduk testbase:

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

Bununla birlikte, değiştirilen (veya yeni bilgilerle güncellenen) belirli satırı güncelleyecek ve değişiklik tarihini expire_datealana ve değişiklik süresini alana kaydedecek şekilde bir tetikleyici nasıl yazabilirim expire_time? (veya bu mümkün mü?)


Bir tetikleyicinin nasıl oluşturulduğuna baktınız mı?

evet, tetikleyicinin nasıl oluşturulduğuna baktım (Ref: msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) ama beni rahatsız eden bir şey UPDATE'i nasıl ekliyor durumu düzelterek tetiklenen satırın ifadesiWHERE id = Changed_Row_ID
Jack

Yanıtlar:


8

Oldukça kolay olurdu ama aslında bu noktada ek bilgiler ekleyecek şekilde veri ekleyen / güncelleyen komutun mantığını değiştirmenizi tavsiye ederim.

Ancak, bir tetikleyici ile devam etmek isterseniz, böyle bir şey yapabilirsiniz:

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  

Bu, değiştirilen / oluşturulan satırları INSERTEDbulmak için tabloyu kullanır product_no. Tetikleyiciler hakkında daha fazla bilgiyi aşağıdaki bağlantıda bulabilirsiniz:

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

Umarım bu sana yardımcı olur.


MS SQL'in aslında bir tablo oluşturacağını hiç düşünmemiştim inserted. Yani, örneğin isim için kendi veritabanı tablosu için değil güvenli olacağını Bu ne anlama geliyor insertedve deleted?
Jack

1
Evet sadece karışıklığı önlemek için bu isimlerle kendi tabloları olmamasını tavsiye ederim ;-)
Mr.Brownstone

tetikleyici manuel oluştur sayfasında, eklenen / silinen tabloların kullanımını açıklayan aşağıdaki sayfaya bir bağlantı bulabilirsiniz ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.