यह वर्तमान में डीबी पर सेट ट्रिगर के लिए रिकर्सन स्तर पर निर्भर करता है।
अगर आप ऐसा करते हैं:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
या यह:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
ऊपर दिए गए उस ट्रिगर को दोबारा नहीं बुलाया जाएगा, और आप सुरक्षित रहेंगे (जब तक कि आप किसी तरह के गतिरोध में नहीं पड़ जाते; यह संभव हो सकता है लेकिन शायद मैं गलत हूं)।
फिर भी, मैं नहीं सोचो यह एक अच्छा विचार है। एक बेहतर विकल्प INSTEAD OF ट्रिगर का उपयोग करना होगा . इस तरह आप डीबी पर पहले (मैनुअल) अपडेट को निष्पादित करने से बचेंगे। केवल ट्रिगर के अंदर परिभाषित एक ही क्रियान्वित किया जाएगा।
INSERT के बजाय ट्रिगर इस प्रकार होगा:
CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO part_numbers (
colA,
colB,
part_description
) SELECT
colA,
colB,
UPPER(part_description)
) FROM
INSERTED
END
GO
यह part_description
पर एक स्पष्ट UPPER कॉल के साथ मूल INSERT कथन को स्वचालित रूप से "प्रतिस्थापित" करेगा। फ़ील्ड.
अद्यतन के बजाय एक ट्रिगर समान होगा (और मैं आपको एक भी ट्रिगर बनाने की सलाह नहीं देता, उन्हें अलग रखें)।
साथ ही, यह @Martin टिप्पणी को संबोधित करता है:यह मल्टीरो इंसर्ट/अपडेट के लिए काम करता है (आपका उदाहरण नहीं है)।