Enno Geschrieben 23. Juni 2008 Teilen Geschrieben 23. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
labxdye Geschrieben 23. Juni 2008 Teilen Geschrieben 23. Juni 2008 Hallo, was bokommst wenn du diese Abfrage ausführst (SELECT barcode FROM schaltersetzen WHERE zeitstempel IS NULL GROUP BY barcode) LabXdye Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ipu Geschrieben 23. Juni 2008 Teilen Geschrieben 23. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 23. Juni 2008 Autor Teilen Geschrieben 23. Juni 2008 @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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 23. Juni 2008 Teilen Geschrieben 23. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
labxdye Geschrieben 23. Juni 2008 Teilen Geschrieben 23. Juni 2008 Hi, versuch mal bitte mit SELECT DISTINCT barcode FROM schaltersetzen WHERE zeitstempel IS NULL LabXdye Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 24. Juni 2008 Autor Teilen Geschrieben 24. Juni 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.