आइए शुरू करते हैं मैं कभी नहीं करूंगा और मेरा मतलब है कि कभी भी एक ट्रिगर में एक संग्रहित प्रो का आह्वान न करें। एक बहु पंक्ति डालने के लिए आपको proc के माध्यम से कर्सर करना होगा। इसका मतलब है कि सेट-आधारित क्वेरी (जैसे कि सभी कीमतों को 10% तक अपडेट करना) के बावजूद आपके द्वारा अभी-अभी लोड की गई 200,000 पंक्तियाँ टेबल को घंटों तक लॉक कर सकती हैं क्योंकि ट्रिगर लोड को संभालने के लिए बहादुरी से प्रयास करता है। इसके अलावा अगर खरीद में कुछ बदलता है, तो आप टेबल पर किसी भी इंसर्ट को तोड़ सकते हैं या टेबल को पूरी तरह से लटका भी सकते हैं। मैं एक दृढ़ विश्वासी हूं कि ट्रिगर कोड को ट्रिगर के बाहर और कुछ नहीं कहना चाहिए।
व्यक्तिगत रूप से मैं बस अपना काम करना पसंद करता हूं। अगर मैंने ट्रिगर में उन क्रियाओं को लिखा है जिन्हें मैं ठीक से करना चाहता हूं तो यह केवल वहीं अपडेट, डिलीट या इंसर्ट करेगा जहां कॉलम बदल गए हैं।
उदाहरण:मान लीजिए कि आप उस last_name फ़ील्ड को अपडेट करना चाहते हैं जिसे आप प्रदर्शन कारणों से वहां रखे गए असामान्यीकरण के कारण दो स्थानों पर संग्रहीत कर रहे हैं।
update t
set lname = i.lname
from table2 t
join inserted i on t.fkfield = i.pkfield
where t.lname <>i.lname
जैसा कि आप देख सकते हैं कि यह केवल उन नामों को अपडेट करेगा जो मेरे द्वारा अद्यतन की जा रही तालिका में वर्तमान में मौजूद नाम से भिन्न हैं।
यदि आप ऑडिटिंग करना चाहते हैं और केवल उन पंक्तियों को रिकॉर्ड करना चाहते हैं जो बदल गई हैं तो सभी क्षेत्रों का उपयोग करके तुलना करें जैसे i.field1 <> d.field1 या i.field2 <> d.field3 (सभी क्षेत्रों के माध्यम से आदि)