Announcement

Collapse
No announcement yet.

Trigger Update nach einem Insert

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

  • Trigger Update nach einem Insert

    Hallo Leute,

    ich möchte die Tabelle Immo updaten mit Werten aus der tbl_sc_partner, nach dem ein insert auf die Tabelle Immo erfolgt ist. Der Insert bringt nur ein Teil der Daten(Briefnr, Fordnr, Dwdocid) und denn rest muss ich über die tabelle tbl_sc_partner(Name1, Name2, Engagementnr,Gebdat, Fordnr ) über die Keys Fordnr oder partnerid holen.

    Hier die beiden Tabellen: Die Verbindung geht entweder 1:1 über Fordnr (der nicht immer zur Verfügung steht) oder 1:n Partnerid (der immer Vorhanden ist)

    Ich habe versucht das über ein Trigger zu lösen aber irgendwie funktioniert das nicht !!

    Wer kann mit da weiter helfen ?

    THX an alle, die sich die Mühe geben

    GO
    CREATE TABLE [dbo].[immo] (
    [DWDOCID] int NULL,
    [DWPAGECOUNT] int NULL,
    [DWDISKNO] int NULL,
    [DWFLAGS] int NULL,
    [DWOFFSET] int NULL,
    [DWSTOREDATETIME] datetime NULL,
    [DWSTOREUSER] nvarchar(50) NULL,
    [DWMODDATETIME] datetime NULL,
    [DWMODUSER] nvarchar(50) NULL,
    [DWLASTACCESSDATETIME] nvarchar(53) NULL,
    [DWLASTACCESSUSER] nvarchar(50) NULL,
    [DWSTORAGEACCESS] nvarchar(50) NULL,
    [ENGAGEMENTNR] nvarchar(50) NULL,
    [NACHNAME] nvarchar(50) NULL,
    [VORNAME] nvarchar(51) NULL,
    [GEBURTSDATUM] nvarchar(50) NULL,
    [SPARTE] nvarchar(50) NULL,
    [BEHLTER] nvarchar(50) NULL,
    [STATUS] nvarchar(50) NULL,
    [MATCHCODE] nvarchar(50) NULL,
    [PRODUNIT] int NULL,
    [PARTNERID] nvarchar(50) NULL,
    [DOKDATUM] nvarchar(50) NULL,
    [VBDATUM] nvarchar(50) NULL,
    [VBAKTZ] nvarchar(50) NULL,
    [TITEL] nvarchar(50) NULL,
    [FORDNR] nvarchar(50) NULL,
    [BARCODENR] nvarchar(50) NULL,
    [MIG_ID] nvarchar(50) NULL,
    [MIG_STATUS] nvarchar(50) NULL,
    [MIG_STATUS_DETAIL] nvarchar(50) NULL,
    [KATEGORIE] nvarchar(50) NULL,
    [BELEGART] nvarchar(50) NULL,
    [PHIN_STATUS] nvarchar(50) NULL,
    [STAPELNUMMER] nvarchar(50) NULL,
    [FORDERGNR] nvarchar(50) NULL,
    [GLAEUBIGERNR] nvarchar(50) NULL,
    [BRIEFID] nvarchar(50) NULL,
    [BRIEFNR] nvarchar(50) NULL,
    [FELD_29] nvarchar(50) NULL)
    ON [PRIMARY]
    WITH (DATA_COMPRESSION = NONE);
    GO

    CREATE TABLE [dbo].[TBL_SC_PARTNER] (
    [PRODUNIT] nvarchar(384) NULL,
    [FORDNR] nvarchar(50) NULL,
    [FORDERGNR] int NULL,
    [GLAEUBIGERNR] int NULL,
    [PARTNERID] nvarchar(384) NOT NULL,
    [NAME2] varchar(35) NULL,
    [NAME3] varchar(35) NULL,
    [NAME1] varchar(35) NOT NULL,
    [STRASSE] varchar(35) NULL,
    [PLZ] varchar(6) NULL,
    [ORT] varchar(28) NULL,
    [GEBURTSDATUM] datetime NULL,
    [BEZSPARTE] varchar(40) NULL,
    [AKTENEIGNER] nvarchar(384) NOT NULL,
    [ENGAGEMENT] varchar(25) NULL,
    [PARTNERIDALT] nvarchar(384) NULL)
    ON [PRIMARY]
    WITH (DATA_COMPRESSION = NONE);
    GO

    Trigger:
    CREATE TRIGGER [dbo].[trig_update_Immo_Meta] ON [dbo].[immo]
    AFTER INSERT
    AS
    --if immo.BRIEFNR is not null
    Begin
    Update dbo.immo
    set i.ENGAGEMENTNR = t.ENGAGEMENT,
    i.Nachname = t.NAme1,
    i.VOrname = t.Name2,
    i.Stapelnummer ='o.k'
    FROM dbo.IMMO i
    INNER JOIN dbo.TBL_SC_PARTNER.Name1 t
    ON t.PARTNERID = i.PARTNERID
    INNER JOIN inserted i
    ON i.Fordnr = t.PARTNERID
    END
    GO

  • #2
    Hallo und willkommen im Forum!

    Zunächst einfach nur ein paar Hinweise:
    Bitte den Code mit den entsprechenden Formattags markieren. Ein wenig Einrückung wär auch nicht verkehrt.
    "..funktioniert irgendwie nicht.." ist redundant, würde es irgendwie funktionieren, hättest Du es nicht gepostet oder?
    Schreib lieber die Fehlermeldung hier rein oder was auch immer unerwartetes passiert.
    Gruß, defo

    Comment


    • #3
      O.k danke für die Hinweise.
      Ich hab jetzt eine Stored procedure geschrieben, der ungefähr das macht, was ich brauche ! Das Problem ist nur, dass ich es nicht über ein event steuern kann wie mit einem Trigger. Die SP sollte unmittelbar nach dem Insert auf die Tabelle Immo laufen und das weiß ich nicht wie ich das hinbekommen. Hier der Code

      CREATE PROCEDURE dbo.upd_Immo_Meta
      (
      @Fordnr nvarchar(50),
      @Partnerid nvarchar(50)

      )
      AS

      IF EXISTS(SELECT *
      FROM dbo.tbl_sc_partner t
      WHERE Fordnr = @Fordnr OR left(PARTNERID,len(PARTNERID)-1) = @Partnerid)
      Begin
      UPDATE dbo.Immo
      set ENGAGEMENTNR = (select ENGAGEMENTNR from TBL_SC_PARTNER where FORDNR=@Fordnr),
      Nachname = (select Name1 from TBL_SC_PARTNER where FORDNR=@Fordnr) ,
      VOrname = (select Name2 from TBL_SC_PARTNER where FORDNR=@Fordnr),
      Fordergnr = (select Name2 from TBL_SC_PARTNER where FORDNR=@Fordnr),
      Glaeubigernr = (select Glaeubigernr from TBL_SC_PARTNER where FORDNR=@Fordnr),
      GEBURTSDATUM = (select GEBURTSDATUM from TBL_SC_PARTNER where FORDNR=@Fordnr),
      Sparte = (select Sparte from TBL_SC_PARTNER where FORDNR=@Fordnr),
      Stapelnummer ='o.k'
      WHERE Fordnr = @Fordnr Or left(PARTNERID,len(PARTNERID)-1) = @Partnerid
      PRINT 'UPDATE performed. '
      END

      ELSE
      BEGIN
      PRINT 'No row found !'
      END

      EXEC dbo.upd_Immo_Meta '2310510394Z','1401'

      Comment


      • #4
        Schau Dir mal die Output Klausel an... und Formatierung von SQL in Beiträgen

        Comment


        • #5
          Wenn schon TRIGGER, sollte das Update in Deinem Trigger eher so lauten:[HIGHLIGHT="SQL"]UPDATE I
          SET i.ENGAGEMENTNR = t.ENGAGEMENT,
          i.Nachname = t.NAme1,
          i.VOrname = t.Name2,
          i.Stapelnummer ='o.k'
          FROM dbo.IMMO AS I
          JOIN dbo.TBL_SC_PARTNER AS t ON t.PARTNERID = i.PARTNERID
          JOIN inserted AS INS ON Ins.Fordnr = t.PARTNERIdD[/HIGHLIGHT]

          Comment


          • #6
            Wenn ich Deinen ersten Beitrag richtig lese, versuchst Du in einem tabellenspezifischen Trigger (tabelle immo) ein Update auf genau die Tabelle des Triggers durchzuführen.
            Mag sein, dass es Systeme gibt, wo das geht. Ich kenne es nicht so.
            Auch wenn es bei Insert-Trigger mit "Eigenupdate" nicht ganz so greifbar ist. Stell es Dir einfach vor, Du baust auch noch einen Update Trigger, der die Datenkonsistenz auch bei Update erhalten soll.
            Dann hast Du einen Trigger, der bei Update feuert und was macht er? Er updated die eigene Tabelle.. und dann? Dann würde er wieder feuern? Wann würde er aufhören?

            Du hast übrigens immer noch keine Fehlermeldungen geliefert. Ich würde mal vermuten, die Fehlermeldung liefert genau das, was ich oben etwas ausformuliert hab.

            Nutze den Trigger einfach so, wie er gedacht ist.
            Du kannst alle alten und neuen Werte der Triggertabelle prüfen und setzen, aber bitte die Feldwerte selbst, nicht per Update.
            Was Dir fehlt, holst Du zuvor über ein Select auf die 2. Tabelle.
            Gruß, defo

            Comment

            Working...
            X