Update von Attributen verschiedener Tabellen

JörgST

Neuer Benutzer
Beiträge
3
Hallo zusammen,

vielleicht kann mir jemand bei meinem Problem helfen.
Folgende Situation:
Ich hole mir in einem PS Script verschiedene Attribute aus Intune, die ich dann mit einem SQL Update Statement in die T-SQL DB unseres Assetmanagements packen muss. Entweder einfügen, wenn noch nicht vorhanden, oder aktualisieren, wenn schon vorhanden.
Hinzu kommen aber noch mehrere Attribute, denen ich statische Werte geben muss. Diese Attribute befinden sich aber in einer anderen Tabelle.
Wenn ich ein normales Update Statement mit einem Join über die 2 Tabellen schreibe, dann kann ich beim "Set" ja aber nur die Attribute einer der beiden Tabellen angeben.
Ich bin kein SQL Pro. Hab da nur begrenztes KnowHow.

Mein Statement sieht so aus:

Update acb
Set acb.SerialNumber = 'PW0AQMF9', ManufacturerName = 'Hersteller', Model = 'Modell'
From SPSAssetClassBase acb
join SPSComputerClassBase ccb on ccb.[Expression-ObjectID] = acb.[Expression-ObjectID]
Where SerialNumber = 'PW0AQMF9'

Was ich aber nun haben möchte ist sowas:

Update acb
Set acb.SerialNumber = 'PW0AQMF9', acb.ManufacturerName = 'Hersteller', acb.Model = 'Modell', ccb.State = '123', ccb.ComputerRole = '2'
From SPSAssetClassBase acb
join SPSComputerClassBase ccb on ccb.[Expression-ObjectID] = acb.[Expression-ObjectID]
Where SerialNumber = 'PW0AQMF9'

Nur funktioniert das halt leider so nicht.

VG
Jörg
 
Werbung:
Ich wüsste nicht, das das geht. Ein UPDATE kann immer nur eine Tabelle aktualisieren, i.d.R. macht man einfach zwei UPDATES, ggf. in der richtigen Reihenfolge. In einigen Fällen gibt es gewisse Anforderungen, häufig wird dann beides in einem Commit gemacht:
Es gibt auch noch ein paar andere, doch sehr spezielle Lösungen ;-)

Warum genau meinst du denn das machen zu müssen? Oder geht es dir nur generell um das richtige Vorgehen?
 
Es ging mir um das richtige Vorgehen. War nur so ein Wunschgedanke, dass es in einem Zug geht. Aber hintereinander geht natürlich auch. Da hätte ich auch drauf kommen können. :)
Ich hab es direkt getestet - es funktioniert einwandfrei.
Vielen Dank für den Tipp. :)
 
Ein UPDATE kann immer nur eine Tabelle aktualisieren,
Code:
postgres=# table t1;
 i  
----
 11
(1 row)

postgres=# table t2;
 i  
----
 22
(1 row)

postgres=# with t as (update t1 set i = i+100 where i=11 returning i) update t2 set i=t.i+200 from t;
UPDATE 1
postgres=# table t1;
  i  
-----
 111
(1 row)

postgres=# table t2;
  i  
-----
 311
(1 row)

postgres=#
 
Dankeschön. Das Problem ist aber tatsächlich schon mit der Antwort von ukulele gelöst. Ich weiß nur nicht wie ich das Thema schließen kann.
 
postgres=# with t as (update t1 set i = i+100 where i=11 returning i) update t2 set i=t.i+200 from t;
Das geht mit MSSQL wohl auch, ist ein Weg eine "Lösung" zu schaffen. Das Update läuft aber nach meinem Verständnis nach einander und nicht gleichzeitig. Und so oder so ist der Mehrwert fraglich gegenüber mehreren, simplen Updates.
 
Werbung:
Das geht mit MSSQL wohl auch, ist ein Weg eine "Lösung" zu schaffen. Das Update läuft aber nach meinem Verständnis nach einander und nicht gleichzeitig. Und so oder so ist der Mehrwert fraglich gegenüber mehreren, simplen Updates.
es läuft atomar in einer Transaktion. Es dürfte auch etwas schneller sein als 2 separate Updates, da weniger Traffic nötig ist. Aber ja, Transaktion starten, Updates, Commit.
 
Zurück
Oben