Announcement

Collapse
No announcement yet.

MSSQL 2005 - UPDATE Trigger fehlerhaft

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

  • MSSQL 2005 - UPDATE Trigger fehlerhaft

    Hi,

    habe einen Trigger, welcher bei UPDATE der Tabelle1 ausgeläst wird. Nun möchte ich die veränderte Spalte in TabelleNEU mit INSERT einfügen wenn sie noch nicht in TabelleNEU existiert, und ein UPDATE ausführen, wenn die Spalte bereits vorhanden ist und verändert wurde. Vergleichsspalte ist SpalteA (eine ID mit Primary Key)

    Code:
    USE [DBName]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER TRIGGER [dbo].[TabCheckTrigger]
       ON  [dbo].[TabCheck] FOR UPDATE NOT FOR REPLICATION
    AS 
    BEGIN
    	SET NOCOUNT ON
    
    	IF EXISTS(SELECT A.ID FROM TabCheck AS A INNER JOIN inserted AS B ON A.ID = B.ID)		
    
    		BEGIN
    			UPDATE TabLog SET 
    			Adresse = B.Adresse, 
    			ErstellungsDatum = B.ErstellungsDatum
    			FROM TabelleLog AS A INNER JOIN inserted AS B 
    			ON A.ID = B.ID
    		END
    	ELSE IF NOT EXISTS(SELECT A.ID FROM TabCheck AS A INNER JOIN inserted AS B ON A.ID = B.ID)
    		BEGIN	
    			SET IDENTITY_INSERT TabLog ON		
    
    			INSERT INTO TabLog
    			(ID
    			,Adresse
    			,ErstellungsDatum) 
    			SELECT 
    			ID
    			,Adresse
    			,ErstellungsDatum
    			FROM inserted
    
    			SET IDENTITY_INSERT TabLog OFF
    		END
    END
    Zuletzt editiert von schnurzli; 24.09.2007, 11:23.

  • #2
    ... und woher sollten wir jetzt wissen, was dein Problem ist?

    bye,
    Helmut

    Comment


    • #3
      hmmm - gute frage. das habe ich doch glatt vergessen.

      also. ich habe diesen trigger erstellt. nun inserte ich über ein programm einen eintrag. bei einem update trägt der trigger die daten in meine tabelle ein. wenn ich jetzt einen wert in der haupttabelle verändere, werden die daten nicht gespeichert. das heißt der update trigger eckt irgendwo an dem insert an. ich weiß leider nicht, wie ich den fehler analysieren soll. habs per profiler versucht, leider habe ich keine fehlermeldung entdeckt.

      und somit bitte ich euch, den trigger kurz zu überfliegen und mir einen eventuellen fehler zu sagen. irgendetwas habe ich denke ich übersehen.

      Comment


      • #4
        Irgendwie komme ich da nicht ganz klar - der Trigger wird für "Tabelle" erzeugt, geprüft für das Update wird auf "Tabelle1", aber ein Update/Insert wird auf TabelleNEU gemacht. Kannst du das mal checken und vielleicht, wenn wirklich 3 verschiedene Tabellen im Spiel sein sollte, diese irgendwie unterschiedlicher benennen (zB TabOrder, TabCheck, TabLog). Ich möchte meine Zeit nicht wegen wegen eines Schlampingkeitsfehlers opfern

        bye,
        Helmut

        Comment


        • #5
          hi,

          habs jetzt hoffentlich richtig gemacht. das kommt davon, wenn man die originalwerte abändert

          danke für deine geduld

          wenn ich die beiden befehele einzeln probiere, funktionieren sie an und für sich.
          kann es ein berechtigungsproblem des triggers sein, dass ich kein insert ausführen darf? wie kann ich denn auftretende fehler in diesem trigger in ein log wegspeichern oder zumindest irgendwie ausgeben?

          Comment


          • #6
            Na gut, sieht schon etwas anders aus. Nach dem derzeitigen Stand würde ich mal sagen, dieser Trigger macht in TabLog nur Updates, nie Inserts, da das exists(select ...) die upgedatete Tabelle und "inserted" gegenüberstellt. Und da das beim SQL-Server immer AFTER-Trigger sind, wird dieses erste "exists" immer TRUE kriegen und das zweite nie eintreten. Probiere es doch mal mit
            IF EXISTS(SELECT A.ID FROM TabLog ...

            bye,
            Helmut

            Comment


            • #7
              danke für deinen tipp,
              bin derzeit leider beruflich unterwegs. werde mich aber wieder melden.

              DANKE

              LG schnurzli

              Comment

              Working...
              X