Announcement

Collapse
No announcement yet.

SQL-Trigger Modifizieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-Trigger Modifizieren

    Hallo,

    ich habe den folgenden Trigger geschrieben:

    Code:
    ALTER TRIGGER [dbo].[DIENSTLEISTUNG_Update]
    ON [dbo].[DIENSTLEISTUNG]
    INSTEAD OF UPDATE
    AS
    
    BEGIN
    
            SET  NOCOUNT ON;
            DECLARE @intNewID int
    
            INSERT INTO [DIENSTLEISTUNG] (BEZEICHNUNG, MENGENEINHEIT, 
            PREIS, BESCHREIBUNG, VORLAUFZEIT,
            AZ_MO, AZ_DI,AZ_MI,AZ_DO,AZ_FR,
            AZ_SA,AZ_SO,DIENSTLEISTUNGSART_ID,
            UPDATE_USER, UPDATE_DATE, RUESTZEIT,
            PERMISSIONS, KONTRAKTPOSITION,ARTIKELNUMMER,
            ANZAHL, BUCHUNGSHINWEIS, SONDERWUNSCH,AKTUELL, PRIORITAET)
    
            SELECT  i.BEZEICHNUNG, i.MENGENEINHEIT, 
            i.PREIS, i.BESCHREIBUNG, i.VORLAUFZEIT,
            i.AZ_MO, i.AZ_DI,i.AZ_MI,i.AZ_DO,i.AZ_FR,
            i.AZ_SA,i.AZ_SO,i.DIENSTLEISTUNGSART_ID,
            i.UPDATE_USER,GETDATE(),i.RUESTZEIT,
            i.PERMISSIONS, i.KONTRAKTPOSITION,i.ARTIKELNUMMER,
            i.ANZAHL, i.BUCHUNGSHINWEIS, i.SONDERWUNSCH,
            'Y', i.PRIORITAET
            
            FROM INSERTED i 
            JOIN DELETED d ON i.ID = d.ID
            WHERE i.PREIS<>d.PREIS
            or i.BEZEICHNUNG<>d.BEZEICHNUNG
            
            UPDATE  s
            SET s.AKTUELL = 'N'
            FROM DIENSTLEISTUNG s
            JOIN INSERTED i ON i.ID = s.ID
    	 			
    SET  NOCOUNT OFF;      
    END
    Der Trigger kopiert eine komplette Zeile mit einer neuen ID wenn PREIS oder BESCHREIBUNG aktualisiert wird. Gleichzeitig wird in der alten Zeile "AKTUELL" auf 'N' und in der neu erstellten Zeile " AKTUELL" auf 'Y' gesetzt. So weit so gut. Mein Problem ist jetzt, das ich nicht weiß wie ich in der neu erstellten Zeile z.B auch die Priorität aktualisieren kann ohne das eine neue Zeile erstellt wird (Soll nur bei aktualisierung von PREIS und BEZEICHNUNG geschehen, also so wie der aktuelle Trigger schon funktioniert). Wenn ich unter SET s.AKTUELL = 'N' die Zeile s.PRIORITAET = i.PRIORITAET hinzufüge, lässt sich die PRIORITAET aktualisieren. Dadurch wird aber auch AKTUELL auf 'N' gesetzt. Das darf aber nicht passieren.

    Hoffenlich könnt ihr mir helfen.

    Danke


    lg Paks

  • #2
    Hallo,

    ich würde - wenn es möglich ist - diesen Teil der Business-Logik aus der Datenbank raushalten und eben im Business-Layer der Anwendung durchführen lassen.
    Wenn es dennoch in der DB sein muss, so wäre eine Stored Procedure eine Alternative um diese Schritte durchzuführen.

    Für den (nested od. rekursiven) Trigger kenne ich nur die Möglichkeit das Verhalten ganz abzuschalten. Siehe SQL SERVER – 2005 Understanding Trigger Recursion and Nesting with examples

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hi,

      versuchs mal mit

      if update( PREIS ) or update( BEZEICHNUG )
      jetzt machst Du etwas
      else
      jetzt machst Du eben nix

      Geht zumindest unter SQL Server 2008. Ob das schon vorher geht kA

      Comment

      Working...
      X