سؤال

أريد منع سجل محدد من حذفه. هذا الزناد يعمل بشكل جيد لهذا السجل المحدد. ومع ذلك ، لا تزال هناك سجلات أخرى عندما يتم حذفها. لماذا ا؟

 ALTER TRIGGER [Globalization].[CountriesTracker] 
 ON [Globalization].[Countries] 
 INSTEAD OF DELETE
 AS 
 BEGIN
SET NOCOUNT ON;
IF ((Select COUNT(*) from [Deleted]
     Where [Deleted].[CountryId] = '36bd1536-fb56-4ec4-957e-1b3afde16c56') = 1)
BEGIN       
    RAISERROR('You can not delete this specific record!', 0, 0)
    ROLLBACK TRANSACTION
    RETURN
END
END

كيف يمكنني التأكد من حذف الصفوف غير المطابقة للشرط أعلاه كما هو متوقع؟

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

المحلول

لديك بدلاً من الزناد بحيث تحتاج إلى حذف فعلي فيه.

سأفكر أيضًا ببساطة في تصفية الصف المحمي لأن:

  • هل تحتاج إلى خطأ في رمي؟ أو تجاهل بصمت؟
  • ماذا عن حذف الصفوف المتعددة التي تحتوي على الصف المحمي: إحباط الكل ، أو حذف الباقي؟

شيء مثل:

ALTER TRIGGER [Globalization].[CountriesTracker]  ON [Globalization].[Countries] 
 INSTEAD OF DELETE
 AS 
SET NOCOUNT ON;

DELETE
   CT
FROM
   [Globalization].[Countries] C
   JOIN
   DELETED D ON C.CountryId = D.CountryId
WHERE
    [Deleted].[CountryId] <> '36bd1536-fb56-4ec4-957e-1b3afde16c56'
 GO

نصائح أخرى

لأن هذا بدلاً من أن تحتاج إلى إجراء عملية الحذف للحالة الافتراضية.

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