Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Update von mehreren Spalten über ein Subselect (https://www.delphipraxis.net/170739-update-von-mehreren-spalten-ueber-ein-subselect.html)

Aurelius 1. Okt 2012 13:04

Datenbank: MSSQL • Version: - • Zugriff über: -

Update von mehreren Spalten über ein Subselect
 
Hallo zusammen :)

Ich möchte mehrere Werte eines Datensatzes über ein Subselect ändern
Code:
UPDATE tab1
SET (col1, col2, col3) = (SELECT val1, val2, val3 FROM tab2, tab3 WHERE...)
WHERE ...
Unter Oracle funktioniert dieses Statement, unter MSSQL leider nicht. Nun ist es sicherlich kein Problem, für jeden Wert ein einzelnes Subselect zu verwenden:
Code:
UPDATE tab1
SET col1 = (SELECT val1 FROM tab2, tab3 WHERE...),
col2 = (SELECT val2 FROM tab2, tab3 WHERE...),
col3 = (SELECT val3 FROM tab2, tab3 WHERE...)
WHERE ...
Allerdings empfinde ich das doch als ziemlich umständlich. Gibt es hierfür unter MSSQL eine "schönere" Variante?

p80286 1. Okt 2012 13:21

AW: Update von mehreren Spalten über ein Subselect
 
was heißt "funktioniert nicht"?
gibt es vielleicht eine Fehlermeldung?
Sinngemäß steht dann darin " Select darf nur einen Wert zurück geben"?
Dannn solltest Du den Select etsprechend modifizieren.

Gruß
K-H

Aurelius 1. Okt 2012 13:58

AW: Update von mehreren Spalten über ein Subselect
 
Code:
Falsche Syntax in der Nähe von '('.
Die unter Oracle valide Syntax wird MSSQL nicht kennen.

Ich bekomme über das Subselect nur einen Datensatz zurück, das passt schon. Ich würde mir gerne die verschiedenen "unnötigen" Subselects, wo sich im Enddefekt nur der zu selektierende Wert ändert, sparen. :)

Furtbichler 1. Okt 2012 14:00

AW: Update von mehreren Spalten über ein Subselect
 
Code:
update
   Tabelle
set   
   Wert1=SelectedValue1,
   Wert2=SelectedValue2
from
   (select
      SelectedValue1,
      SelectedValue2
    from
      AnotherTable
   ) x
where
   x.SomeID = Tabelle.PK
so ähnlich müsste das gehen. Wozu gibts eigentlich die OH vom SQL-Server?

Aurelius 1. Okt 2012 14:25

AW: Update von mehreren Spalten über ein Subselect
 
Die Lösung funktioniert, danke sehr. :thumb:

Ich muss zu meiner Schande gestehen, dass ich an diese syntaktische Lösung gar nicht gedacht habe. Ist jetzt hoffentlich im Hirn abgespeichert. Google hatte ich verwendet, aber nichts passendes gefunden. Die OH habe ich irgendwie übersehen :oops:

Furtbichler 1. Okt 2012 15:01

AW: Update von mehreren Spalten über ein Subselect
 
Na ja, so genau steht das auch nicht in der OH, dort steht nur was über 'external tables'.
Ich habe letzte Woche gerade eine Schulung für Mitarbeiter abgehalten und denen war auch nicht bewusst, das man ein benanntes SELECT-Statement genauso behandeln kann, wie eine Tabelle. Und der Rest ist einfach: Überall wo 'Tabelle' steht, kann man dann ein SELECT einbauen. Nur benannt muss es halt sein, also

Zitat:

(select * from foobar) MyVirtualTable


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz