शामिल होने वाले स्तंभों पर अनुक्रमित अस्थायी तालिकाओं में डालने से inserted
. के रूप में चीजें बेहतर हो सकती हैं और deleted
अनुक्रमित नहीं हैं।
आप @@ROWCOUNT
. की जांच कर सकते हैं ट्रिगर के अंदर ताकि आप केवल इस तर्क को पंक्तियों की कुछ थ्रेशोल्ड संख्या के ऊपर निष्पादित करें, हालांकि SQL Server 2008 पर यह संख्या कुछ हद तक अधिक हो सकती है यदि ट्रिगर को MERGE
के परिणाम के रूप में निकाल दिया गया था। कथन (यह सभी MERGE
. से प्रभावित पंक्तियों की कुल संख्या लौटाएगा कार्रवाइयां न केवल उस विशिष्ट ट्रिगर के लिए प्रासंगिक हैं)।
उस स्थिति में आप कुछ ऐसा कर सकते हैं जैसे SELECT @NumRows = COUNT(*) FROM (SELECT TOP 10 * FROM INSERTED) T
यह देखने के लिए कि क्या सीमा पूरी हुई है।
जोड़
एक अन्य संभावना जिसके साथ आप प्रयोग कर सकते हैं, वह है इन बड़े अपडेट के लिए ट्रिगर को दरकिनार करना। आप SET CONTEXT_INFO
. का उपयोग कर सकते हैं ध्वज सेट करने और ट्रिगर के अंदर इसका मान जांचने के लिए। तब आप उपयोग कर सकते हैं OUTPUT inserted.*, deleted.*
JOIN
. की आवश्यकता के बिना एक पंक्ति के लिए "पहले" और "बाद" मान प्राप्त करने के लिए बिल्कुल।
DECLARE @TriggerFlag varbinary(128)
SET @TriggerFlag = CAST('Disabled' AS varbinary(128))
SET CONTEXT_INFO @TriggerFlag
UPDATE YourTable
SET Bar = 'X'
OUTPUT inserted.*, deleted.* INTO @T
/*Reset the flag*/
SET CONTEXT_INFO 0x