AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Update von mehreren Spalten über ein Subselect
Thema durchsuchen
Ansicht
Themen-Optionen

Update von mehreren Spalten über ein Subselect

Ein Thema von Aurelius · begonnen am 1. Okt 2012 · letzter Beitrag vom 1. Okt 2012
Antwort Antwort
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#1

Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 14:04
Datenbank: MSSQL • Version: - • Zugriff über: -
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?
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 14:21
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#3

AW: Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 14:58
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.
Jonas
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 15:00
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?
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#5

AW: Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 15:25
Die Lösung funktioniert, danke sehr.

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
Jonas
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Update von mehreren Spalten über ein Subselect

  Alt 1. Okt 2012, 16:01
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz