2009-02-05 9 views
18

टी-एसक्यूएल 2005 में एक डिलीट से पहले मैं एक ट्रिगर कैसे फायर कर सकता हूं? वास्तव में एक घटना के बाद आग लगती है और वे ट्राइगर फ़ंक्शन में तर्क से पहले नहीं दिखते हैं। इंस्टीटैड ऑफ़ जो मैं चाहता हूं वह नहीं है। मुझे रिकॉर्ड हटाने से पहले मुझे आग लगनी होगी। कोई विचार?टी-एसक्यूएल 2005 में एक डिलीट से पहले मैं एक ट्रिगर कैसे फायर कर सकता हूं?

+0

धन्यवाद टॉम, मिच और स्टीवन – Fet

उत्तर

28

आप विकल्प के इंस्टॉलेशन का उपयोग कर सकते हैं, बस अंत में पंक्तियों को स्पष्ट रूप से हटाएं। उदाहरण के लिए:

CREATE TRIGGER dbo.My_Table_Delete_Instead_Of_Trigger 
ON dbo.My_Table 
INSTEAD OF DELETE 
AS 
BEGIN 

    -- Do some stuff here 

    DELETE T 
    FROM DELETED D 
    INNER JOIN dbo.My_Table T ON T.PK_1 = D.PK_1 AND T.PK_2 = D.PK_2 
END 

यह कॉलम PK_1 और PK_2 स्तंभों से बना एक प्राथमिक कुंजी माना जाता है।

+0

आपको बहुत धन्यवाद टॉम – Fet

+0

क्या यह फिर से ट्रिगर को आग नहीं करेगा? –

5

आप नहीं कर सकते। लेकिन आप डिलीट ट्रिगर के बाद रोलबैक कर सकते हैं।

0

आप नहीं कर सकते। आप क्या कर सकते हैं डिलीट टेबल की जांच करें और अगर आपको ऐसा करने की ज़रूरत है तो हटाएं पूर्ववत करें।

यहाँ घटनाओं के अनुक्रम है:

  • संदेश एसक्यूएल सर्वर
  • आइटम तालिका
  • OnDelete उत्प्रेरक आग तर्क विफल रहता है अपने
  • तर्क प्रदर्शन से निकाल दिया जाता/गुजरता को हटाने के आदेश/जो कुछ भी , हटाएं
+0

यह "डिलीट करने से पहले" ट्रिगर - कैस्केडिंग डिलीट्स के लिए सबसे आम उपयोग केस में मदद नहीं करता है - जो मुझे इस बात से परेशान करता है कि आप क्या हटाएंगे। –

+1

मैं आमतौर पर एक इतिहास प्रविष्टि बनाने के लिए ऑनडिले ट्रिगर का उपयोग करता हूं जिसे किसी दिए गए समय पर उपयोगकर्ता द्वारा एक तत्व हटा दिया गया था। –

+0

कस्टम ऑडिटिंग जो एप्लिकेशन व्यवहार पर निर्भर नहीं है। मुझें यह पसंद है। बहुत अच्छे विचार के लिए +1। –

संबंधित मुद्दे

 संबंधित मुद्दे