منع حذف سجل محدد
-
26-09-2019 - |
سؤال
أريد منع سجل محدد من حذفه. هذا الزناد يعمل بشكل جيد لهذا السجل المحدد. ومع ذلك ، لا تزال هناك سجلات أخرى عندما يتم حذفها. لماذا ا؟
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
نصائح أخرى
لأن هذا بدلاً من أن تحتاج إلى إجراء عملية الحذف للحالة الافتراضية.
لا تنتمي إلى StackOverflow