Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

DTS Paket - SQL Statement funktioniert nicht

Empfohlene Antworten

Veröffentlicht

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

Hallo,

was bokommst wenn du diese Abfrage ausführst

(SELECT barcode

FROM schaltersetzen

WHERE zeitstempel IS NULL

GROUP BY barcode)

LabXdye

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

  • 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?

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

Hi, versuch mal bitte mit

SELECT DISTINCT barcode

FROM schaltersetzen

WHERE zeitstempel IS NULL

LabXdye

  • 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 :rolleyes: 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.