Frage

Ich möchte einen Trigger erstellen, um zu überprüfen, was gegen Geschäftsregeln gelöscht wird und dann den Löschvorgang abzubrechen, wenn nötig. Irgendwelche Ideen?

Die Lösung verwendet, um die statt DELETE-Trigger. Der Transfer abbrechen tran stoppte den Lösch. Ich hatte Angst, dass ich eine Kaskade Problem hat, wenn ich den Lösch tat, aber das schien nicht zu passieren. Vielleicht kann ein Trigger nicht selbst auslösen.

War es hilfreich?

Lösung

Verwenden Sie ein INSTEAD OF DELETE (siehe MSDN ) Trigger und entscheiden innerhalb der auslösen, was Sie wirklich tun wollen.

Andere Tipps

Die Lösung verwendet, um die statt DELETE-Trigger. Der Transfer abbrechen tran stoppte den Lösch. Ich habe Angst, dass ich eine Kaskade Problem habe, wenn ich die Lösch tat aber das did'nt geschehen zu sein scheint. Vielleicht kann ein Trigger auslösen selbst nicht. Wie auch immer, bedankt sich bei allen für Ihre Hilfe.

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

Der Trigger kann die aktuelle Transaktion rückgängig zu machen, die die Wirkung der Aufhebung der Löschung haben. Wie das Plakat oben auch Staaten, können Sie auch eine statt Trigger verwenden.

Laut MSDN-Dokumentation über INSTEAD OF DELETE auslöst:

  

Die gelöschte Tabelle in eine DELETE gesendet   Trigger enthält ein Bild der Reihen   wie sie sich vor dem DELETE   Anweisung ausgegeben wurde.

Wenn ich es richtig verstehe die DELETE ausgeführt tatsächlich wird. Was bin ich?

Wie auch immer, ich verstehe nicht, warum wollen Sie die Datensätze löschen und wenn die Geschäftsregeln werden dann nicht bestanden diese Datensätze wiederherzustellen. Ich hätte schwören sollte es einfacher sein, zu testen, ob Sie die Geschäftsregeln bestehen, bevor die Datensätze zu löschen.

Und ich hätte gesagt, eine Transaktion verwenden, ich habe nicht vor etwa INSTEAD OF Trigger gehört.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top