Hilfe bei Update Script
Hallo,
ich habe folgendes Problem:
update [DATA].[dbo].Projekt_Details
set ProjektID (select tmp_pid
from [DATA].[dbo].KUNDEN a ,[GLOBALDATA].[dbo].Projekt_Details b
where a.KID =b.KID)
Hier erhalte ich immer eine Fehlermeldung das die Unterabfrage mehr als einen Wert zurückgegeben hat.
Zur Info:
Die ProjektID kann mehrfach vorkommen, die KID ist nur einmal vorhanden in beiden tabellen.
Der Versuch das gnze per Cursor zu machen dauert für die 24 Millionen Datensätze über 248 Tage
Ich hoffe es kann mir jemand helfen.
Ganz liebe Grüße
Sven
ich habe folgendes Problem:
update [DATA].[dbo].Projekt_Details
set ProjektID (select tmp_pid
from [DATA].[dbo].KUNDEN a ,[GLOBALDATA].[dbo].Projekt_Details b
where a.KID =b.KID)
Hier erhalte ich immer eine Fehlermeldung das die Unterabfrage mehr als einen Wert zurückgegeben hat.
Zur Info:
Die ProjektID kann mehrfach vorkommen, die KID ist nur einmal vorhanden in beiden tabellen.
Der Versuch das gnze per Cursor zu machen dauert für die 24 Millionen Datensätze über 248 Tage
Ich hoffe es kann mir jemand helfen.
Ganz liebe Grüße
Sven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 279885
Url: https://administrator.de/forum/hilfe-bei-update-script-279885.html
Ausgedruckt am: 08.01.2025 um 08:01 Uhr
6 Kommentare
Neuester Kommentar
Hallo Sven,
mal abgesehen davon, daß hinter der ProjektID das Gleichheitszeichen fehlt, solltest Du noch irgendeinen Bezug von der Unterabfrage zur Hauptabfrage herstellen. Die Abfrage "select tmp_pid from [DATA].[dbo].KUNDEN a ,[GLOBALDATA].[dbo].Projekt_Details b where a.KID =b.KID" liefert offensichtlich mehr als einen Wert zurück, aber Du willst vermutlich einen genau bestimmten davon in die ProjektID schreiben. Dieser Bezug fehlt.
Schreib doch mal Deine Lösung mit dem Cursor, dann kann man vermutlich sehen, wie die Verknüpfung sein muß.
Gruß, Mad Max
mal abgesehen davon, daß hinter der ProjektID das Gleichheitszeichen fehlt, solltest Du noch irgendeinen Bezug von der Unterabfrage zur Hauptabfrage herstellen. Die Abfrage "select tmp_pid from [DATA].[dbo].KUNDEN a ,[GLOBALDATA].[dbo].Projekt_Details b where a.KID =b.KID" liefert offensichtlich mehr als einen Wert zurück, aber Du willst vermutlich einen genau bestimmten davon in die ProjektID schreiben. Dieser Bezug fehlt.
Schreib doch mal Deine Lösung mit dem Cursor, dann kann man vermutlich sehen, wie die Verknüpfung sein muß.
Gruß, Mad Max
Ich sehe hier auch mehrere "Fuschereien". Erstmal ist der Join in der Unterabfrage überflüssig, die Tabelle Projekt_Details wird auch im Update benutzt. Dann ist der Join nicht explizit, das kann schnell zu Fehlern führen. Du verwendest die Aliase a und b aber aus welcher Tabelle dann deine Spalte tmp_pid kommt, verätst du eigentlich gar nicht.
Das Gleichheitszeichen fehlt wie schon angemerkt und 24 Mio Datensätze sind nichts, das müsste auch mit Cursor eher in 248 Sekunden durch sein als in Tagen.
Probier doch mal das hier:
..aber nur wenn du weißt, was du da tust.
Das Gleichheitszeichen fehlt wie schon angemerkt und 24 Mio Datensätze sind nichts, das müsste auch mit Cursor eher in 248 Sekunden durch sein als in Tagen.
Probier doch mal das hier:
UPDATE [DATA].[dbo].[Projekt_Details]
SET ProjektID = ( SELECT DISTINCT a.tmp_pid
FROM [DATA].[dbo].[KUNDEN] a
WHERE a.KID = [DATA].[dbo].[Projekt_Details].KID )
Dann sind deine Indexe möglicherweise nicht optimal. Wenn es sich um einen einmaligen Vorgang handelt, ist das kein Problem. Wenn du aber andere Abfragen hast die z.B. in KUNDEN nach KID suchen sollte auf dieser Spalte ein Index liegen. Man könnte auch anehmen, das sei der PK der Tabelle deswegen ist das schon sonderbar.
Moin,
funktioniert hat der Befehl von ukulele vermutlich, aber stimmt auch das Ergebnis? In der Problembeschreibung steht, daß die zu aktualisierende Tabelle "Projekt_Details" in der Datenbank "DATA" ist, die in der Unterabfrage verwendete Tabelle "Projekt_Details" ist aber in der Datenbank "GLOBALDATA". Und dann stimmt der Befehl von ukulele nämlich nicht mehr. Deshalb hat mich auch die Lösung mit dem Cursor interessiert, daraus könnte man die richtige Verknüpfung der Daten möglicherweise ersehen.
Gruß, Mad Max
funktioniert hat der Befehl von ukulele vermutlich, aber stimmt auch das Ergebnis? In der Problembeschreibung steht, daß die zu aktualisierende Tabelle "Projekt_Details" in der Datenbank "DATA" ist, die in der Unterabfrage verwendete Tabelle "Projekt_Details" ist aber in der Datenbank "GLOBALDATA". Und dann stimmt der Befehl von ukulele nämlich nicht mehr. Deshalb hat mich auch die Lösung mit dem Cursor interessiert, daraus könnte man die richtige Verknüpfung der Daten möglicherweise ersehen.
Gruß, Mad Max