Comment puis-je annuler une suppression en SQL
Question
Je souhaite créer un déclencheur pour vérifier ce qui est en train d'être supprimé par rapport aux règles de gestion, puis annuler la suppression si nécessaire. Des idées?
La solution a utilisé le déclencheur Au lieu de supprimer. Le retour en arrière a arrêté la suppression. J'avais peur d'avoir un problème en cascade lorsque j'ai supprimé le fichier, mais cela ne semble pas se produire. Peut-être qu'un déclencheur ne peut pas se déclencher.
La solution
Utilisez un INSTEAD OF DELETE
(voir MSDN ) déclenche et décide dans le déclencheur ce que tu veux vraiment faire.
Autres conseils
La solution a utilisé le déclencheur Au lieu de supprimer. Le retour en arrière a arrêté la suppression. J'avais peur d'avoir un problème en cascade lorsque j'ai supprimé, mais cela ne semblait pas se produire. Peut-être qu'un déclencheur ne peut pas se déclencher. Quoi qu'il en soit, merci à tous pour votre aide.
ALTER TRIGGER [dbo].[tr_ValidateDeleteForAssignedCalls]
on [dbo].[CAL]
INSTEAD OF DELETE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @RecType VARCHAR(1)
DECLARE @UserID VARCHAR(8)
DECLARE @CreateBy VARCHAR(8)
DECLARE @RecID VARCHAR(20)
SELECT @RecType =(SELECT RecType FROM DELETED)
SELECT @UserID =(SELECT UserID FROM DELETED)
SELECT @CreateBy =(SELECT CreateBy FROM DELETED)
SELECT @RecID =(SELECT RecID FROM DELETED)
-- Check to see if the type is a Call and the item was created by a different user
IF @RECTYPE = 'C' and not (@USERID=@CREATEBY)
BEGIN
RAISERROR ('Cannot delete call.', 16, 1)
ROLLBACK TRAN
RETURN
END
-- Go ahead and do the update or some other business rules here
ELSE
Delete from CAL where RecID = @RecID
END
Le déclencheur peut annuler la transaction en cours, ce qui aura pour effet d'annuler la suppression. Comme l'indique également l'affiche ci-dessus, vous pouvez également utiliser un déclencheur.
Selon la documentation MSDN concernant les déclencheurs INSTEAD OF DELETE
:
La table supprimée envoyée à un DELETE le déclencheur contient une image des lignes comme ils existaient avant le DELETE déclaration a été publiée.
Si je comprends bien, la suppression est en cours d’exécution. Qu'est-ce qui me manque?
Quoi qu'il en soit, je ne comprends pas pourquoi vous souhaitez supprimer les enregistrements. Si les règles de gestion ne sont pas transmises, restaurez ces enregistrements. J'aurais juré qu'il devrait être plus facile de tester si vous respectez les règles de gestion avant de supprimer les enregistrements.
Et j’aurais dit d’utiliser une transaction, je n’avais jamais entendu parler des déclencheurs INSTEAD OF
.