كيف يمكنك تحديد أولويات المشغلات المتعددة للجدول؟

StackOverflow https://stackoverflow.com/questions/94959

سؤال

لديّ بعض المحفزات على الطاولة وأريد الاحتفاظ بها متفرق وترغب في تحديد أولوياتها.

يمكن أن يكون لدي مشغل واحد فقط وأقوم بالمنطق هناك، لكنني كنت أتساءل عما إذا كانت هناك طريقة أسهل/منطقية لإنجاز ذلك من خلال ترتيب محدد مسبقًا؟

هل كانت مفيدة؟

المحلول

استخدم sp_settriggerorder.يمكنك تحديد المشغل الأول والأخير لإطلاق النار اعتمادًا على العملية.

sp_settriggerorder على MSDN

من الرابط أعلاه:
أ.ضبط أمر الإطلاق لمشغل DML
يحدد المثال التالي أن مشغل uSalesOrderHeader هو المشغل الأول الذي يتم إطلاقه بعد حدوث عملية UPDATE في الجدول Sales.SalesOrderHeader.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'Sales.uSalesOrderHeader', 
    @order='First', 
    @stmttype = 'UPDATE';

ب.ضبط أمر الإطلاق لمشغل DDL
يحدد المثال التالي أن المشغل ddlDatabaseTriggerLog هو المشغل الأول الذي يتم إطلاقه بعد وقوع حدث ALTER_TABLE في قاعدة بيانات AdventureWorks.

USE AdventureWorks;
GO
sp_settriggerorder 
    @triggername= 'ddlDatabaseTriggerLog', 
    @order='First', 
    @stmttype = 'ALTER_TABLE', 
    @namespace = 'DATABASE';

نصائح أخرى

يرى هنا.

يمكنك استخدام sp_settriggerorder لتحديد ترتيب كل مشغل على الجدول.

ومع ذلك، أود أن أزعم أنه سيكون من الأفضل أن يكون لديك مشغل واحد يقوم بأشياء متعددة.هذا هو خصوصًا لذا، إذا كان الترتيب مهمًا، نظرًا لأن هذه الأهمية لن تكون واضحة جدًا إذا كان لديك محفزات متعددة.تخيل شخصًا يحاول دعم قاعدة البيانات لعدة أشهر/سنوات على المسار الصحيح.بالطبع من المحتمل أن تكون هناك حالات تحتاج فيها إلى مشغلات متعددة أو أن التصميم أفضل حقًا، لكنني سأبدأ بافتراض أنه يجب أن يكون لديك مشغل واحد وتعمل من هناك.

تذكر أنه إذا قمت بتغيير ترتيب التشغيل، فمن الممكن أن يأتي شخص آخر لاحقًا ويعيد ترتيبه مرة أخرى.وأين يمكنك توثيق ما يجب أن يكون عليه أمر التشغيل حتى يعرف مطور الصيانة أنه لا يعبث بالأمر وإلا ستتعطل الأمور؟إذا كان من الضروري بالتأكيد تنفيذ مهمتين بترتيب معين، فإن الطريق الآمن الوحيد هو وضعهما في نفس المشغل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top