2010-08-12 19 views
6

के साथ एक विदेशी कुंजी है, मैं एक हटाएं ट्रिगर बनाने की कोशिश कर रहा हूं। मेरे पास यह नेविगेशन टेबल है जिसे Nemanet_Navigation कहा जाता है। तालिका में खुद के लिए एक विदेशी कुंजी है लेकिन तालिका के लिए संबंध चुनते समय मेरे पास INSERT और अद्यतन विशिष्टता चयनित है - नियम कोई कार्रवाई हटाएं। तो मैं कैस्केडिंग का चयन नहीं करता हूं। तब मैं इस ट्रिगर है:हटाएं ट्रिगर नहीं बना सकता क्योंकि तालिका में कैस्केडिंग DELETE

CREATE TRIGGER Del_Nemanet_Navigation ON Nemanet_Navigation 
    INSTEAD OF DELETE 
AS 

CREATE TABLE #Table(
    Nav_ID uniqueidentifier 
    ) 
    INSERT INTO #Table (Nav_ID) 
    SELECT Nav_ID 
    FROM deleted 

    DECLARE @C uniqueidentifier 
    SET @c = 0 

    WHILE @C <> (SELECT COUNT(Nav_ID) FROM #Table) BEGIN 
     SELECT @c = COUNT(Nav_ID) FROM #Table 

     INSERT INTO #Table (Nav_ID) 
     SELECT Nemanet_Navigation.Nav_ID 
     From Nemanet_Navigation 
     LEFT OUTER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID 
     WHERE Nemanet_Navigation.Nav_pID IN (SELECT Nav_ID FROM #Table) 
     AND  #Table.Nav_ID IS NULL 
    END 

    DELETE Nemanet_Navigation 
    FROM Nemanet_Navigation 
    INNER JOIN #Table ON Nemanet_Navigation.Nav_ID = #Table.Nav_ID 

लेकिन मैं निम्नलिखित त्रुटि मिलती है:

Cannot create INSTEAD OF DELETE trigger 'Del_Nemanet_Navigation' on 'Nemanet_Navigatin'.

इसका कारण यह है तालिका व्यापक साथ एक विदेश कुंजी हटाना है। लेकिन मेरी Nemante_Navigation तालिका में नियम हटा दिया गया है - कोई कार्रवाई नहीं है (लेकिन किसी कारण से ग्रे चिह्नित है जिसे मैं नहीं जानता - और मैं इसे बदल नहीं सकता)। ट्रिगर Nemanet_Navigation तालिका के तहत ट्रिगर नामक फ़ोल्डर में है। क्या कोई मदद कर सकता है?

+0

SQL सर्वर का कौन सा संस्करण? –

उत्तर

3

INSTEAD OF ट्रिगर्स उन विचारों को संशोधित करने के लिए हैं जिन्हें आप DML का उपयोग नहीं कर सकते हैं। BEFORE या AFTER ट्रिगर के साथ प्रयास करें।

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