Zum Inhalt springen

DTS Paket - SQL Statement funktioniert nicht


Enno

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry Jungs,

Kommando zurück.

Mein Fehler.

In einem davorliegenden Task wurde die Tabelle von DaBa1 nach DaBa2 kopiert. Allerdings unter dem falschen User :rolleyes: Damit konnte der Schaltersetzen Task die Daten dann nicht finden.

Sorry mein Fehler.

Trotzdem Danke für die Hilfe.

Gruß

Enno

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...