empêcher un enregistrement spécifique soient supprimées
-
26-09-2019 - |
Question
Je veux éviter un enregistrement spécifique d'être supprimé. Ce déclencheur fonctionne très bien pour cet enregistrement spécifique. Cependant, d'autres dossiers restent encore quand ils sont en cours de suppression. Pourquoi?
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
Comment puis-je faire en sorte que les lignes qui ne correspondent pas à la condition ci-dessus sont supprimés comme prévu?
La solution
Vous avez un déclencheur INSTEAD OF de sorte que vous avez besoin d'un réel SUPPRIMER en elle.
Je voudrais aussi considérer filtrer simplement la ligne protégée parce que:
- Avez-vous besoin d'un jet d'erreur? Ou silencieusement ignorer?
- Qu'en est-il de la ligne multi suppressions qui contiennent la ligne protégée: Abandonner l'ensemble, ou supprimer le reste
Quelque chose comme:
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
Autres conseils
Parce que c'est INSTEAD OF vous devez toujours effectuer l'opération de suppression pour le cas par défaut.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow