verhindert einen bestimmten Datensatz gelöscht werden
-
26-09-2019 - |
Frage
Ich möchte von einem bestimmten Datensatz verhindern gelöscht werden. Dieser Trigger funktioniert gut für diesen bestimmten Datensatz. Aber auch andere Aufzeichnungen bleiben noch, wenn sie Wesen gelöscht. Warum?
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
Wie kann ich sicherstellen, dass die Zeilen nicht die obige Bedingung passenden gelöscht werden als erwartet?
Lösung
Sie haben einen INSTEAD OF-Trigger so benötigen Sie eine tatsächliche DELETE drin.
Ich würde auch prüfen, einfach Filtern die geschützte Zeile aus, weil:
- Sie benötigen einen Fehler werfen? Oder leise ignorieren?
- Was mehrreihige Löschungen, die die geschützten Zeile enthalten: Abbruch der gesamten oder den Rest löschen
So etwas wie:
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
Andere Tipps
Da dies STATT Sie müssen noch den Löschvorgang für den Standardfall auszuführen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow