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

स्व-संदर्भ तालिका के लिए कैस्केड हटाएं

मान लें कि आप अपना FOREIGN KEY रख रहे हैं जगह में बाधा, आप समस्या को FOR DELETE . में ठीक नहीं कर सकते चालू कर देना। FOR ट्रिगर (जिसे AFTER के रूप में भी जाना जाता है) ट्रिगर) आग बाद में गतिविधि हुई है। और एक विदेशी कुंजी रोक देगी हटाए जाने से एक पंक्ति यदि इसमें संदर्भ हैं। विदेशी कुंजी की जांच पहले . होती है हटाना।

आपको जो चाहिए वह है एक INSTEAD OF चालू कर देना। आपको यह भी ध्यान में रखना होगा कि आपके वर्तमान ट्रिगर ने संदर्भ के केवल एक "स्तर" से निपटने का प्रयास किया है। (इसलिए, यदि पंक्ति 3 पंक्ति 2 और पंक्ति 2 संदर्भ पंक्ति 1 को संदर्भित करती है, और आप पंक्ति 1 को हटाते हैं, तो आपके ट्रिगर ने केवल पंक्ति 2 को निकालने का प्रयास किया है)

तो, कुछ इस तरह:

CREATE TRIGGER [dbo].[T_comment_Trigger]
    ON [dbo].[Comments]
    INSTEAD OF DELETE
AS
    ;WITH IDs as (
       select id from deleted
       union all
       select c.id
       from Comments c
              inner join
            IDs i
              on
                 c.ParentID = i.id
    )
    DELETE FROM Comments
    WHERE id in (select id from IDs);

यदि अन्य (गैर-स्व-संदर्भ) कैस्केडिंग विदेशी कुंजी बाधाएं हैं, तो उन सभी को इस ट्रिगर में क्रियाओं द्वारा प्रतिस्थापित किया जाना है। ऐसे मामले में, मैं उन सभी आईडी की सूची रखने के लिए एक टेबल वैरिएबल पेश करने की सलाह दूंगा जो अंततः Comments से हटा दी जाएंगी। तालिका:

CREATE TRIGGER [dbo].[T_comment_Trigger]
    ON [dbo].[Comments]
    INSTEAD OF DELETE
AS
    declare @deletions table (ID varchar(7) not null);
    ;WITH IDs as (
       select id from deleted
       union all
       select c.id
       from Comments c
              inner join
            IDs i
              on
                 c.ParentID = i.id
    )
    insert into @deletions(ID)
    select ID from IDs

    DELETE FROM OtherTable
    WHERE CommentID in (select ID from @deletions)

    --This delete comes last
    DELETE FROM Comments
    WHERE id in (select ID from @deletions);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्वेरी प्रोफाइलिंग 101 - हाँ, यह वास्तव में आपके SQL सर्वर प्रदर्शन में सुधार कर सकता है

  2. SQL सर्वर में चयन कथन में शून्य मानों वाली पंक्तियों को कैसे फ़िल्टर करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 110

  3. SQL सर्वर रनिंग क्वेरी मॉनिटरिंग

  4. T-SQL का उपयोग करके SQL सर्वर एजेंट जॉब बनाएँ

  5. Mssql मॉड्यूल का उपयोग करके Node.JS से विंडोज़ प्रमाणीकरण के साथ SQL सर्वर से कैसे कनेक्ट करें?