impedendo un record specifico venga eliminato
-
26-09-2019 - |
Domanda
Voglio evitare che un record specifico dall'eliminazione. Questo trigger funziona bene per quello record specifico. Tuttavia, altri record rimangono ancora quando sono in fase di eliminazione. Perché?
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
Come posso garantire che righe non corrispondenti alla condizione di cui sopra vengono eliminati come previsto?
Soluzione
Si dispone di un trigger INSTEAD OF quindi è necessario un vero e proprio DELETE in esso.
Vorrei anche prendere in considerazione semplicemente filtrare la fila protetta fuori perché:
- Avete bisogno di un lancio errore? O in silenzio ignorare?
- Che dire di eliminazioni di fila multipli che contengono la fila protetta:? Annullare l'intero, o eliminare il resto
Qualcosa di simile:
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
Altri suggerimenti
Poiché si tratta invece di ancora necessario eseguire l'operazione di eliminazione per il caso di default.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow