SQL 2008R2 Express - Trigger für insert/update

Also es gibt auf jedenfall mehrere Ansatzpunkte, die Reihenfolge ist nicht ganz unerheblich.
Code:
CREATE TRIGGER [dbo].[trg_test] ON [dbo].[TransactionLog]
AFTER INSERT
AS

BEGIN
   SET NOCOUNT ON;

   DELETE
   FROM   ActInv
   WHERE   ActInv.USERNUMBER IN (   SELECT   i.USERNUMBER
                   FROM   INSERTED i
                   WHERE   i.TRANSCODE = 'RN' )

   UPDATE   UserTransactions
   SET     UserTransactions.TRANSCODE = ( CASE WHEN i.TRANSCODE = 'WN' THEN 'RN' ELSE 'WN' END )
   FROM   UserTransactions
   INNER JOIN INSERTED i
   ON     UserTransactions.USERNUMBER = i.USERNUMBER
   WHERE   i.TRANSCODE IN ( 'WN','RN' )
   AND     UserTransactions.TRANSCODE IN ( 'WN','RN' )
END;
Das guckt welche USERNUMBERs einen RN Eintrag bekommen haben und löscht in ActInv. Wenn deine Anwendung erst danach versucht den Eintrag in ActInv zu ändern wird das möglicherweise einen Fehler provozieren.

Sauberer könnte es sein einen INSTEAD OF Trigger auf ActInv zu schreiben der beim setzen des Eintrags von 500 auf 200 guckt, ob noch ein RN da ist (das wird ja dann in deinem Beispiel bereits wieder auf WN stehen) und wenn nicht, die Anzahl auf 0 setzt oder die Zeile ganz löscht. Dazu kenne ich aber zu wenig von der Tabelle da der INSTEAD OF Trigger auch alle anderen Vorgänge betrifft.
 
Werbung:
Zurück
Oben