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.

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top