Veröffentlicht 23. Juni 200817 j Hi alle zusammen, habe hier eine MS-SQL 2000 Datenbank. Dort gibt es ein DTS Paket. Der wichtigste Teil ist dieses SQL Statement: UPDATE CUSTPACKINGSLIPJOUR SET STUPACKINGSLIPSHIPPED= '1' WHERE (DATAAREAID = 'stu') AND (PACKINGSLIPID IN (SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode)) custpackingslipjour ist in Connection2 auf einem MS-SQL 2005 Server schaltersetzen ist in Connection 1 auf dem Server. Wenn ich nur schreibe ... AND (PACKINGSLIPID = 0815) läuft das ganze DTS Paket durch. Wenn es wie oben geschrieben ist dann läuft es zwar ohne Fehler durch macht aber nichts. Nun wurde mir geraten das IN(SELECT... durch ein JOIN zuersetzen. Allerdings habe ich keine Ahnung von SQL. Jedefalls nicht von JOINS. Kann mir einer helfen mit dem JOIN oder mir noch nen Tip geben warum es nicht läuft? Immerhin lief das ganze Ding seit 4 Jahren einwandfrei. Danke für die hilfe Gruß Enno
23. Juni 200817 j Hallo, was bokommst wenn du diese Abfrage ausführst (SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode) LabXdye
23. Juni 200817 j hi, es könnte sein, daß es daran liegt, daß die abfrage "SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode" mehr als einen datensatz zurückliefert und demnach mehr als einen barcode. um die update-anweisung ausführen zu können, wird aber genau ein wert zum abgleich benötigt. daher funktioniert das auch, wenn genau ein wert angegeben wird. grüße von ipu
23. Juni 200817 j Autor @labxdye es gibt die Liste aller Barcodes die den Zeitstempel NULL haben. @ipu komisch ist halt das es früher schon funktioniert hat. hmm. wie kann man es denn ändern das der update immer nur 1 Datensatz bearbeitet?
23. Juni 200817 j es könnte sein, daß es daran liegt, daß die abfrage "SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode" mehr als einen datensatz zurückliefert Das gilt nur bei korrelierten Subqueries, die einen Wert zurückliefern auf den geändert werden soll. In der WHERE-Bedingung können da natürlich auch mehrere Sätze zurückkommen. Wenn es wie oben geschrieben ist dann läuft es zwar ohne Fehler durch macht aber nichts. Die einzig logische Erklärung ist dann, dass es keine Sätze gibt, die auf deine Bedingung zutreffen. Bekommst Du denn ein Ergebnis, wenn Du einen einfachen select draus machst? SELECT * FROM CUSTPACKINGSLIPJOUR WHERE (DATAAREAID = 'stu') AND (PACKINGSLIPID IN (SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode)); Dim Dim
23. Juni 200817 j Hi, versuch mal bitte mit SELECT DISTINCT barcode FROM schaltersetzen WHERE zeitstempel IS NULL LabXdye
24. Juni 200817 j Autor Sorry Jungs, Kommando zurück. Mein Fehler. In einem davorliegenden Task wurde die Tabelle von DaBa1 nach DaBa2 kopiert. Allerdings unter dem falschen User Damit konnte der Schaltersetzen Task die Daten dann nicht finden. Sorry mein Fehler. Trotzdem Danke für die Hilfe. Gruß Enno
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.