ট্রিগারদের ফায়ারিং অর্ডার কীভাবে পরিবর্তন করবেন?


12

রিলে আমি খুব কমই ট্রিগার ব্যবহার করি। তাই আমি প্রথমবারেই একটি সমস্যার মুখোমুখি হয়েছি। ট্রিগার সহ আমার প্রচুর টেবিল রয়েছে (প্রতিটি টেবিলের জন্য 2 বা আরও বেশি)। আমি প্রতিটি টেবিলে ফায়ারিং ট্রিগার ক্রমটি জানতে এবং পরিবর্তন করতে চাই। এই তথ্য পাওয়া সম্ভব?

যোগ করেছেন:

এখানে আমি পেয়েছি mssqltips একটি ভাল enoght নিবন্ধ

উত্তর:


12

আপনি প্রতিটি টেবিলের সমস্ত ট্রিগার তালিকাবদ্ধ করতে নিম্নলিখিত বিবৃতিটি ব্যবহার করতে পারেন ।

EXEC sp_MSForEachTable 'PRINT ''?'' 
EXEC sp_helptrigger ''?'''

একবার আপনি সমস্ত ট্রিগার সন্ধান করুন। আপনি sp_settriggerorder ব্যবহার করে ম্যানুয়ালি অর্ডার পরিবর্তন করতে পারেন

বিকল্প পাঠ


2
"পরের "টি কি কেবল ইঙ্গিত করে না যে একই ধরণের দুই বা ততোধিক ট্রিগারগুলির মৃত্যুদন্ড কার্যকর করার আদেশ সম্পর্কে কোনও আদেশের পরিবর্তে ট্রিগারটিকে <<<<<<<<<> এর পরে সংজ্ঞা দেওয়া হয়েছে?
ডেভিড স্পিলিট

@ ডেভিড - হ্যাঁ! আপনি ঠিক বলেছেন
কোডারহক

12

আইআইআরসি আপনি যে আদেশটি দিয়েছিলেন তার কোনও গ্যারান্টি দিতে পারবেন না (কোনও প্রতিক্রিয়া জানাতে হবে এবং কখন কী প্রতিক্রিয়া জানাতে হবে তার একই সংজ্ঞা দিয়ে) কোনও প্রদত্ত সংখ্যক ট্রিগারের জন্য কোনও টেবিলের বিরুদ্ধে প্রদত্ত পদক্ষেপের জন্য আগুন জ্বলে ওঠে।

আপনি তিন বা ততোধিক কম থাকলেও আপনি প্রথমে প্রথমটি নির্ধারণ করতে sp_settrigger অর্ডার ব্যবহার করতে পারেন, সর্বশেষে সর্বশেষ হতে হবে এবং মাঝের একটিতে "অপরিবর্তিত" ক্রম আছে।

যদি আপনার ট্রিগারগুলি এটিকে সম্পাদন করা ক্রমের প্রতি সংবেদনশীল হয় তবে প্রায়ই নির্দেশ করে যে আপনার নকশাটি যতটা প্রয়োজন তার চেয়ে জটিল হয়ে উঠছে (সাধারণত জৈব বৃদ্ধির কারণে) এবং কিছু রিফ্যাক্টরিং থেকে উপকার পেতে পারে।


+1 আপনি ঠিক বলেছেন, আমাকে এই কোডটি রিফ্যাক্টর করতে হবে (এটি জটিল এবং ক্রস লিঙ্কগুলি রয়েছে ...), তবে আমি প্রথম ধাপে রয়েছি - তদন্ত।
গারিক

5
-- List tables with triggers and their firing order.  By Jackson Jarvis.
SELECT [tbl].[name] AS 'Table'
      ,[trg].[name] AS 'Trigger'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstInsertTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Insert First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastInsertTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Insert Last'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstUpdateTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Update First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastUpdateTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Update Last'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsFirstDeleteTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Delete First'
      ,CASE OBJECTPROPERTY([trg].[id] ,'ExecIsLastDeleteTrigger')
            WHEN 0 THEN ''
            ELSE 'X'
       END AS 'Delete Last'
  FROM            [sysobjects] AS [trg] WITH (NOLOCK)
       INNER JOIN [sysobjects] AS [tbl] WITH (NOLOCK)
            ON  [trg].[parent_obj] = [tbl].[id]
  WHERE [trg].[TYPE] IN (N'TR')
  ORDER BY
       [tbl].[name] ASC
      ,[trg].[name] ASC
  ;

1
এটি দেখতে বেশ চটকদার। @garik, এটি কি আপনার পরিবেশ নিয়ে কাজ করে? (বিটিডাব্লু, শুরু হওয়া এসকিউএল মন্তব্যটিও কোড ব্লকের অংশ হওয়া উচিত))
নিক চ্যামাস

1
@ নিক আপনি ঠিক বলেছেন। আমি কয়েক মিনিটের জন্য এটি চারপাশে খুঁজছি।
গারিক

ডিফল্ট হিসাবে নিক, এই বৈশিষ্ট্য খালি। সুতরাং যদি মৃত্যুদন্ড কার্যকর করা হয়, উদাহরণস্বরূপ exec sp_settriggerorder @triggername = 'tr_xxx' , @order = 'Last' , @stmttype= 'DELETE'আমরা জ্যাকসনের অনুসন্ধানের ফলাফল ('এক্স') দেখতে পাচ্ছি। ধন্যবাদ, জ্যাকসন
গারিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.