none
Trigger will einfach nicht RRS feed

  • Frage

  • Hallo Community,

    ich möchte eine Tabelle über einen Trigger updaten.

    1. Tabelle: tblRechnungsdetails

    Relevante Spalten: RechnDetailsID (Datentyp int identity), RechnDetailsEinzelpreis Datentyp (decimal(18,2))

    2. Tabelle: tblAusgaben

    Relevanten Spalten: AusgabenID (Datentyp int), AusgabenBetrag (decimal(18,2))

    Das soll passieren:

    Wenn ein neuer Datensatz in die Tabelle "tblRechnungsdetails" geschrieben wird, dann sollen die ID und der Einzelpreis in die Tabelle "Ausgaben" übernommen werden. Um dies zu realisieren, verwende ich einen INSERT-Trigger. Hier der Code:

    ALTER TRIGGER [dbo].[tblRechnungsdetails_INS]
    ON [dbo].[tblRechnungsdetails]
    AFTER INSERT
    AS
    BEGIN
    
    	SET NOCOUNT ON
    	
    	DECLARE @id int
    	DECLARE @einzelpreis decimal(10,2)
    	
    	SET @id = (SELECT RechnDetailsID FROM inserted)
    	SET @einzelpreis = (SELECT RechnDetailsEinzelpreis FROM inserted)
    	
    	UPDATE dbo.tblAusgaben
    	SET 
    		AusgabenID = @id,
    		AusgabenBetrag = AusgabenBetrag + @einzelpreis
    	
    END

    Das Problem:

    Leider passiert aber rein garnicht in der Tabelle "tblAusgaben". Meinem Verständnis nach sollten bei Einfügen eines neuen Datensatzes in die Tabelle "tblRechnungsdetails" die Werte aus den Spalten "RechnDetailsID" und "RechnDetailsIDEinzelpreis" in die jeweiligen Spalten der Tabelle "tblAusgaben" übernommen werden.

    Wo liegt hier der Fehler? Hat jemand eine Idee?

    Viele Grüße

    zachy123


    • Bearbeitet zachy123 Freitag, 10. August 2012 10:24
    Freitag, 10. August 2012 10:23

Antworten

  • Grundsätzlich sollte so etwas bei einem Fakturierungslauf berechnet werden und nicht per Trigger.

    Ein Trigger wird per Statement aufgerufen, d.h. dein Trigger ist per se schon mal fehleranfällig, da in der virtuellen Tabelle INSERTED mehr als eine Zeile enthalten sein kann.

    Zu deinem eigentlichen Problem: Wo sieht die (relationale) Verbindung zwischen Rechnugsdetail und Ausgaben aus? Der UPDATE macht so nämlich gar keinen Sinn. Hier stellt sich ernsthaft die Frage nach der Korrektheit des Datenmodells..

    Am ehesten sollte es wohl so aussehen:

    ALTER TRIGGER [dbo].[tblRechnungsdetails_INS] ON [dbo].[tblRechnungsdetails]
        AFTER INSERT
    AS
        SET NOCOUNT ON;
    	
        INSERT  INTO dbo.tblAusgaben
                ( RechnungsID ,
                  Summe 
                )
                SELECT  RechnDetailsID ,
                        SUM(RechnDetailsEinzelpreis)
                FROM    INSERTED
                GROUP BY RechnDetailsID;          


    btw, eine Rechnungsposition kann auch ein negativer Betrag sein (eine Gutschrift). Die hat in Ausgaben nix zu suchen..
    Freitag, 10. August 2012 10:37
    Moderator

Alle Antworten