में कोई सम्मिलित, अद्यतन, हटाई गई पंक्ति की प्रतिलिपि कैसे करें यदि कोई उपयोगकर्ता HelloWorlds
तालिका बदलता है, तो मैं चाहता हूं कि 'कार्रवाई उन्होंने किया', समय उन्होंने किया, और मूल पंक्ति डालने की एक प्रति HelloWorldsHistory
में।SQL सर्वर ट्रिगर (0)
मैं कॉलम की लंबाई के कारण कार्रवाइयों को सम्मिलित करने, अपडेट करने और हटाने के लिए अलग ट्रिगर से बचना पसंद करूंगा।
मैं इस की कोशिश की है:
create trigger [HelloWorlds_After_IUD] on [HelloWorlds]
FOR insert, update, delete
as
if @@rowcount = 0
return
if exists (select 1 from inserted) and not exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'INSERT', helloWorld.id, helloWorld.text ... and more from inserted
end
else
if exists (select 1 from inserted) and exists (select 1 from deleted)
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'UPDATE', helloWorld.id, helloWorld.text ... and more from deleted
end
else
begin
insert into HelloWorldHistory (hwh_action, ..long column list..)
select 'DELETE', helloWorld.id, helloWorld.text ... and more from deleted
end
end
मैं एक डालने दिखाई कभी नहीं देखा है, लेकिन मैं अद्यतन देखा है। मैं 3 अलग ट्रिगर करने की कोशिश करने जा रहा हूं, हालांकि कॉलम सूचियों को बनाए रखना मजेदार नहीं होगा।
UPDATE के लिए डेटा के स्रोत के रूप में हटाए गए उपयोग का उपयोग नहीं करते हैं, तो आप पहले से रिकॉर्ड किए गए पिछले मान को लॉग कर देंगे। आपकी लॉग पंक्ति "अपडेट" प्रकार होगी लेकिन डेटा एक सम्मिलन से हो सकता था। मुझे मेरे जवाब में टिप्पणी देखें। –