SQL Server 2005 - insert und update mit select abfrage
Hallo zusammen,
ich habe ein verzwicktes Problem (zumindest für mich), vielleicht kann mir jemand auf die Sprünge helfen.
Folgendes:
eine Eingabe-Tabelle (Auftragsnummer (PK), Kundennummer, Kundenname, Erfass-Datum und Fertigungsgrad). Nur die letzte Spalte kann vom User geändert werden
90018411 / (...) / 100,00
90011111 / (...) / 50,00
eine Bestand-Tabelle (Auftragsnummer (Pk), Fertigungsgrad)
10013051 / 50,00
90018411 / 95,00
Ich möchte jetzt erreichen, dass die Bestand-Tabelle anhand der Eingabe-Tabelle gefüllt wird. Neue Zeilen hinzufügen, bestehende abändern.
Am Ende soll in der Bestand-Tabelle folgender Inhalt stehen:
10013051 / 50,00
90018411 / 100,00
90011111 / 50,00
Ich versuch schon den ganzen Vormittag die Insert-Anweisung hinzubekommen. Aber es klappt nicht...
insert into bestand
select a.aufnr, a.fertigungsgrad
from eingabe as a
left join bestand as b on a.aufnr = b.aufnr
Mit dieser Abfrage erhalte ich zusätzlich zu meiner neuen Zeile (90011111) auch die bestehende (90018411) und somit eine Verletzung der Primary-Key Einschränkung
Die Update-Anweisung ist kein Problem, funktioniert auch. Wäre allerdings gut, wenn es die Möglichkeit gäbe, beide Abfragen zu kombinieren. Wenn nicht, auch egal, dann lass ich die eben nacheinander laufen.
update bestand
set bestand.fertigungsgrad = a.fertigungsgrad
from bestand as b inner join eingabe as a on b.aufnr = a.aufnr
Vielleicht hat jemand von euch eine zündende Idee. Ich bekomme es leider nicht allein auf die Reihe.
Schöne Grüße, Franziska
ich habe ein verzwicktes Problem (zumindest für mich), vielleicht kann mir jemand auf die Sprünge helfen.
Folgendes:
eine Eingabe-Tabelle (Auftragsnummer (PK), Kundennummer, Kundenname, Erfass-Datum und Fertigungsgrad). Nur die letzte Spalte kann vom User geändert werden
90018411 / (...) / 100,00
90011111 / (...) / 50,00
eine Bestand-Tabelle (Auftragsnummer (Pk), Fertigungsgrad)
10013051 / 50,00
90018411 / 95,00
Ich möchte jetzt erreichen, dass die Bestand-Tabelle anhand der Eingabe-Tabelle gefüllt wird. Neue Zeilen hinzufügen, bestehende abändern.
Am Ende soll in der Bestand-Tabelle folgender Inhalt stehen:
10013051 / 50,00
90018411 / 100,00
90011111 / 50,00
Ich versuch schon den ganzen Vormittag die Insert-Anweisung hinzubekommen. Aber es klappt nicht...
insert into bestand
select a.aufnr, a.fertigungsgrad
from eingabe as a
left join bestand as b on a.aufnr = b.aufnr
Mit dieser Abfrage erhalte ich zusätzlich zu meiner neuen Zeile (90011111) auch die bestehende (90018411) und somit eine Verletzung der Primary-Key Einschränkung
Die Update-Anweisung ist kein Problem, funktioniert auch. Wäre allerdings gut, wenn es die Möglichkeit gäbe, beide Abfragen zu kombinieren. Wenn nicht, auch egal, dann lass ich die eben nacheinander laufen.
update bestand
set bestand.fertigungsgrad = a.fertigungsgrad
from bestand as b inner join eingabe as a on b.aufnr = a.aufnr
Vielleicht hat jemand von euch eine zündende Idee. Ich bekomme es leider nicht allein auf die Reihe.
Schöne Grüße, Franziska
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146703
Url: https://administrator.de/forum/sql-server-2005-insert-und-update-mit-select-abfrage-146703.html
Ausgedruckt am: 18.05.2025 um 00:05 Uhr
3 Kommentare
Neuester Kommentar
Moin Franziska,
natürlich gibt es [abhängig vom darunterliegenden Datenbankblech] auch fast immer eine sprachlich erlaubte Variante zum Abfackeln von INSERT/UPDATE in einem Statement.
Aber hey! Solange dir nicht eine Mietpauschale pro Statement-Anzahl vom Gehalt abgezogen wird... lass es bzw trenne es.
Was soll der Geiz... UPDATE und INSERT mögen vielleicht in der heutigen Applikation nur an einer Stelle im Programmfluss der Applikation erreichbar sein.
In drei Wochen brauchst du aber an einer anderen Stelle im Workflow nun wieder explizit den "Nur-UPDATE-Businesscase".
Zum anderen - einen INSERT aus einem LEFT JOIN abzuleiten wie in deinem ersten Statement sieht ja wirklich aus wie linksgerührter Erdbeerquark...
Das versteht kein Mensch mehr ein Jahr nach erfolgreichem Projektabschluss bei der nächsten kleinen Wartung.
Der INSERT kömnnte zwar so funktionieren.
... aber.... nee.... muss nicht sein.
Dann lieber so:
Das ist zwar ungetestet, aber flüssig lesbar und die Intention des Verzapfers ist erkennbar.
Grüße
Biber
natürlich gibt es [abhängig vom darunterliegenden Datenbankblech] auch fast immer eine sprachlich erlaubte Variante zum Abfackeln von INSERT/UPDATE in einem Statement.
Aber hey! Solange dir nicht eine Mietpauschale pro Statement-Anzahl vom Gehalt abgezogen wird... lass es bzw trenne es.
Was soll der Geiz... UPDATE und INSERT mögen vielleicht in der heutigen Applikation nur an einer Stelle im Programmfluss der Applikation erreichbar sein.
In drei Wochen brauchst du aber an einer anderen Stelle im Workflow nun wieder explizit den "Nur-UPDATE-Businesscase".
Zum anderen - einen INSERT aus einem LEFT JOIN abzuleiten wie in deinem ersten Statement sieht ja wirklich aus wie linksgerührter Erdbeerquark...
Das versteht kein Mensch mehr ein Jahr nach erfolgreichem Projektabschluss bei der nächsten kleinen Wartung.
Der INSERT kömnnte zwar so funktionieren.
insert into bestand
select a.aufnr, a.fertigungsgrad
from eingabe as a
left join bestand as b on a.aufnr = b.aufnr
where b.aufnr is null;
Dann lieber so:
insert into bestand (Aufnr, fertigungsgrad)
select a.aufnr, a.fertigungsgrad
from eingabe as a
Where a.aufnr not in (select aufnr from bestand)
Das ist zwar ungetestet, aber flüssig lesbar und die Intention des Verzapfers ist erkennbar.
Grüße
Biber
[OT]
Ja, ich habe angesichts der Temperaturen meinen Praktikantinnen auch schon erlaubt, die Fusskettchen abzulegen...
Grüße zurück
Biber
[/OT]
Ja, ich habe angesichts der Temperaturen meinen Praktikantinnen auch schon erlaubt, die Fusskettchen abzulegen...
Grüße zurück
Biber
[/OT]