Announcement

Collapse
No announcement yet.

Update über mehrere Tabellen

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

  • Update über mehrere Tabellen

    Hallo,
    ich habe ein Select über mehrere Tabellen. In Tabelle „xyz“ gibt es eine Spalte Abgearbeitet, bei der ich „1“ rein schreibe wenn die Daten abgearbeitet sind.

    Gibt es eine Möglichkeit über den gleichen Select ein Update zu geben, mit dem ich diese Spalte mit „1“ füllen kann?
    Oder geht so etwas über mehrere Tabellen nicht?

  • #2
    Hallo Merlin,

    ja diese Möglichkeit gibt es. Mann kann anstatt des select-Bereiches "einfach" ein update einfügen. So viel ich weiss, darf man die zu updatende Tabelle allerdings nur 1 mal verjoint haben.

    Beispiel:

    -- select

    select a.*, b.*
    from xyz a
    inner join tabelle2 b on a.spalte1 = b.spalte1
    where a.abgearbeitet = 0

    -- update

    update xyz set abgearbeitet = 1
    from xyz a
    inner join tabelle2 b on a.spalte1 = b.spalte1
    where a.abgearbeitet =

    Comment


    • #3
      Hallo Peter,
      die Sache ist etwas komplizierter. Mein Select sieht wie folgt aus:

      declare @Datum as DateTime
      Set @Datum = '07.08.2006 11:15:00'

      SELECT dbo.Auftragsstatus.IDStat,
      BuchPeriode = Case when Month(@Datum)>10 then Month(@Datum)-9 else Month(@Datum)+3 end,
      Year(@datum) as Jahr,
      dbo.Auftragsstatus.statDatum, dbo.Personal.PersonalNr,
      (cast(dbo.Auftragsstatus.sDauer as float)/60) as Stunden,
      Eingang_KST.KST AS KST_Empf, dbo.Entwicklungsauftrag.EANr, dbo.Innenleistungsauftrag.ILANr, Personal_KST.KST AS KST_Sender,
      dbo.Leistungsarten.Leistungsart, dbo.Eingang.Bezeichnung
      FROM dbo.Kostenstelle Eingang_KST RIGHT OUTER JOIN
      dbo.Entwicklungsauftrag RIGHT OUTER JOIN
      dbo.Innenleistungsauftrag RIGHT OUTER JOIN
      dbo.Personal RIGHT OUTER JOIN
      dbo.Leistungsart INNER JOIN
      dbo.Leistungsarten ON dbo.Leistungsart.IDL = dbo.Leistungsarten.IDL RIGHT OUTER JOIN
      dbo.Eingang INNER JOIN
      dbo.Auftragsstatus ON dbo.Eingang.IDE = dbo.Auftragsstatus.IDE ON dbo.Leistungsarten.IDL = dbo.Auftragsstatus.IDL ON
      dbo.Personal.IDMa = dbo.Auftragsstatus.IDMa ON dbo.Innenleistungsauftrag.IDILA = dbo.Eingang.IDILA ON
      dbo.Entwicklungsauftrag.IDEA = dbo.Eingang.IDEA ON Eingang_KST.IDK = dbo.Eingang.IDK LEFT OUTER JOIN
      dbo.Kostenstelle Personal_KST ON dbo.Personal.IDK = Personal_KST.IDK
      WHERE (dbo.Auftragsstatus.Abgerechnet IS NULL) AND (NOT (dbo.Auftragsstatus.IDMa IS NULL)) AND (dbo.Auftragsstatus.statDatum <= CONVERT(DATETIME,
      @Datum, 102))
      ORDER BY dbo.Personal.PersonalNr, dbo.Auftragsstatus.statDatum

      Wie du siehst ist in der where-Klausel ?(dbo.Auftragsstatus.Abgerechnet IS NULL)?

      Ich zeige die Daten in einer Tabelle an. Nun verarbeite ich den Daten. Danach sollen die Daten als abgerechnet abgelegt werden...
      Also Set dbo.Auftragsstatus.Abgerechnet = 1

      Wie muss ich das umsetzen....?
      Ich hoffe du kannst mir da etwas weiterhelfen...

      Dank

      Comment


      • #4
        Hallo,

        da ich deiner Datenbankstruktur nicht genau kenne ist dies noch schwierig zu sagen, aber so wie ich das sehe funktioniert der update wie folgt:

        declare @Datum as DateTime
        Set @Datum = '07.08.2006 11:15:00'

        UPDATE Auftragsstatus set Abgerechnet = 1
        FROM dbo.Kostenstelle Eingang_KST RIGHT OUTER JOIN
        dbo.Entwicklungsauftrag RIGHT OUTER JOIN
        dbo.Innenleistungsauftrag RIGHT OUTER JOIN
        dbo.Personal RIGHT OUTER JOIN
        dbo.Leistungsart INNER JOIN
        dbo.Leistungsarten ON dbo.Leistungsart.IDL = dbo.Leistungsarten.IDL RIGHT OUTER JOIN
        dbo.Eingang INNER JOIN
        dbo.Auftragsstatus AStatus ON dbo.Eingang.IDE = AStatus.IDE ON dbo.Leistungsarten.IDL = AStatus.IDL ON
        dbo.Personal.IDMa = AStatus.IDMa ON dbo.Innenleistungsauftrag.IDILA = dbo.Eingang.IDILA ON
        dbo.Entwicklungsauftrag.IDEA = dbo.Eingang.IDEA ON Eingang_KST.IDK = dbo.Eingang.IDK LEFT OUTER JOIN
        dbo.Kostenstelle Personal_KST ON dbo.Personal.IDK = Personal_KST.IDK
        WHERE (AStatus.Abgerechnet IS NULL) AND (NOT (AStatus.IDMa IS NULL)) AND (AStatus.statDatum <= CONVERT(DATETIME,
        @Datum, 102)

        Comment


        • #5
          Das sieht ganz gut aus ich werd es gleich mal pobieren....

          Dank

          Comment

          Working...
          X