मेरे पास UPDATE और INSERT पर एक टेबल ट्रिगर है जो एक पंक्ति को दूसरी तालिका में जोड़ता है। यह केवल एक पंक्ति जोड़ने की जरूरत है अगर चार कॉलमों में से एक को बदल दिया जाए। मैंने परिवर्तनों के परीक्षण के लिए IF UPDATE (कॉल) का उपयोग करने की कोशिश की, लेकिन इसमें एक अंधा स्थान है। यह केवल परीक्षण करता है कि कुछ मूल्य आया था। मुझे गहराई में जाने की जरूरत है, मुझे एक सच्चे बदलाव को देखने के लिए पुराने और नए मूल्यों की तुलना करने की आवश्यकता है। इसमें INSERT और UPDATE दोनों के साथ काम करना होता है।
एक अद्यतन के मामले में यह आसान है क्योंकि सम्मिलित और हटाए गए तालिकाओं में वे मान हैं जो मैं ट्रिगर के भीतर तुलना कर सकता हूं। हालाँकि, INSERT के लिए केवल सम्मिलित तालिका में मान हैं। क्योंकि मुझे एक ही ट्रिगर में यह सब चाहिए, मैं उस INSERT केस को कैसे संभालूँ?
यहां उस ट्रिगर की स्क्रिप्ट दी गई है जिसे मैं संशोधित करना चाहता हूं:
ALTER TRIGGER [dbo].[trATPerson_alter]
ON [mydb].[dbo].[AT_Person]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Not all updates require a push
IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive]))
BEGIN
INSERT INTO [mydb].[dbo].[AT_Person_To_Push] (
[Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
)
SELECT [Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
FROM inserted
END
END