Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

सम्मिलित/हटाए गए ट्रिगर टेबल पर धीरे-धीरे शामिल हों

शामिल होने वाले स्तंभों पर अनुक्रमित अस्थायी तालिकाओं में डालने से 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VBA का उपयोग करके Excel को SQL में निर्यात करें

  2. SQL में अधिकतम ड्रा डाउन की गणना

  3. SQL सर्वर में लिंक किए गए सर्वर से प्राथमिक कुंजी लौटाएं (T-SQL उदाहरण)

  4. कस्टम एसक्यूएल ग्रुप बाय क्लॉज

  5. क्या कोई समझा सकता है कि 'एन' उच्चतम वेतन प्राप्त करने के लिए निम्न SQL क्वेरी कैसे काम करती है