हमने अलग-अलग टेबल चुना क्योंकि यह आपकी प्राथमिक तालिका दुबला और तेज रखेगा। हमने ट्रिगर्स का भी चयन किया, तर्क दिया कि यदि आपने कभी भी प्रवेश तंत्र को बदल दिया है, तो आप अपनी ऑडिटिंग को फिर से लिखना नहीं चाहेंगे। इसके अलावा यह आकस्मिक डीबीए पक्ष परिवर्तनों को पकड़ सकता है।
चूंकि अद्यतन प्रभावी ढंग से एक डिलीट है और फिर एक डालने के बाद, आप एक ट्रिगर के साथ क्या सुझाव दिया गया है, यह हासिल कर सकते हैं- यही हमने किया है।
वास्तव में अपने मौजूदा तालिका से मेल खाने एक तालिका बनाएं, लेकिन कुछ जोड़ा कॉलम के साथ: AUDIT_GUID VARCHAR (40), AUDIT_TIMESTAMP DATETIME, AUDIT_ACTION VARCHAR (20)
एक "के बाद सम्मिलित करें बनाएँ, हटाएं, अद्यतन करें "निम्न सामान्य पैटर्न का उपयोग करके ट्रिगर करें (जहां आवश्यक हो वहां अधिक कॉलम जोड़ें)।
CREATE TRIGGER CustomerAudit ON Customer
AFTER INSERT,DELETE,UPDATE AS
BEGIN
IF (TRIGGER_NESTLEVEL()>1) RETURN
DECLARE @Time DateTime = CURRENT_TIMESTAMP
DECLARE @Audit_GUID varchar(100) = NEWID()
INSERT INTO Customer_History (FirstName, LastName, Audit_Date, Audit_Action, Audit_GUID)
SELECT
FirstName, LastName, @Time, 'Delete', @Audit_GUID
FROM
Deleted
INSERT INTO Customer_History
(FirstName, LastName, Audit_Date, Audit_Action, Audit_GUID)
SELECT
FirstName, LastName, @Time, 'Insert', @Audit_GUID
FROM
Inserted
END
आप अपडेट प्राप्त करना चाहते हैं, वे इतिहास तालिका में पंक्तियों में एक ही Audit_GUID मूल्य के साथ एक हटाने & अद्यतन है कि हो जाएगा। टाइमस्टैम्प आपको एक निश्चित समय में किए गए परिवर्तनों की जांच करने की अनुमति देता है, और यदि आवश्यक हो तो व्यक्ति को दोष देने के लिए हमने एक वर्तमान उपयोगकर्ता भी जोड़ा है!
(यदि कोई सुझाव दे सकता है कि मैं इस कोड को सही तरीके से प्रारूपित करने के लिए स्टैक ओवरव्लो कैसे प्राप्त कर सकता हूं, तो कृपया मुझे बताएं) – Runonthespot
@Runonthespot: बुलेट के बाद कोड को सही प्रारूपित करने के लिए 8 प्रमुख रिक्त स्थान की आवश्यकता है। मैंने कॉलम सूचियों में अल्पविराम के बाद एक जगह भी जोड़ा, जो कि "अनचाहे" लंबी लाइनों में मदद करने के लिए प्रतीत होता है। –
@Catcall, बहुत धन्यवाद। – Runonthespot