Guten Morgen,
ich komme bei einer Fehlermeldung einfach nicht weiter, vielleicht hat jemand von euch ja eine Idee.
Es gibt zwei Tabellen, dbo.Packlisten und dbo.TempPacklisten. Mit der gespeicherten Prozedur dbo.MergePacklisten werden die Daten aus der Tabelle dbo.TempPacklisten mit der Tabelle dbo.Packlisten abgeglichen, dh. neue Daten in dbo.Packlisten eingefügt und bestehende Daten bei Bedarf aktualisiert. Gelöscht wird aus dbo.Packlisten nie etwas.
Die Prozedur hat immer fleißig ihren Dienst getan, bis ich die Spalte "MengeGeplantInEinheit" nachträglich hinzugefügt habe. Vom Aufbau her ist diese Spalte identisch zu der Spalte "MengeGeplantKisten". Dennoch erhalte ich beim Ausführen der Prozedur folgende Fehlermeldung:
Nachricht 8114, Stufe 16, Status 5, Prozedur dbo.MergePacklisten, Zeile 5 [Batchstartzeile 2]
Fehler beim Konvertieren des varchar-Datentyps in numeric.
Ich verstehe nicht, warum von einem varchar Datentyp gesprochen wird, wo doch in der Spalte nur decimal vorhanden ist. Der Fehler tritt auch auf, wenn ich testweise manuell Daten dbo.TempPacklisten eintrage.
Was mir aufgefallen ist: Das Einfügen funktioniert reibungslos. Solange dbo.Packlisten komplett leer ist, kann ich die Funktion problemlos durchlaufen lassen und die Werte werden übertragen. Erst wenn ich die Funktion starte und Werte in dbo.Packlisten aktualisiert werden müssen erscheint die Fehlermeldung.
Hier der Aufbau der beiden Tabellen - er ist bei dbo.Packlisten und dbo.TempPacklisten identisch:
Hier die gespeicherte Prozedur dbo.MergePacklisten:
set NOCOUNT on
MERGE dbo.Packlisten AS Trgt
USING dbo.Temp_Packlisten Src
ON Trgt.ID = Src.ID
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID, VerkaufsstellenID, MarktDatum, PLU, MengeGeplantKisten, MengeGeplantInEinheit, KommentarMarktTeam, KommentarKommissionierung, Rolli, PositionErstellt, PositionGepackt)
VALUES (ID, VerkaufsstellenID, MarktDatum, PLU, MengeGeplantKisten, MengeGeplantInEinheit, KommentarMarktTeam, KommentarKommissionierung, Rolli, PositionErstellt, PositionGepackt)
WHEN MATCHED AND
(
ISNULL(Trgt.ID, '') <> ISNULL(Src.ID, '')
OR
ISNULL(Trgt.VerkaufsstellenID, '') <> ISNULL(Src.VerkaufsstellenID, '')
OR
ISNULL(Trgt.MarktDatum, '') <> ISNULL(Src.MarktDatum, '')
OR
ISNULL(Trgt.PLU, '') <> ISNULL(Src.PLU, '')
OR
ISNULL(Trgt.MengeGeplantInEinheit, '') <> ISNULL(Src.MengeGeplantInEinheit, '')
OR
ISNULL(Trgt.MengeGeplantKisten, '') <> ISNULL(Src.MengeGeplantKisten, '')
OR
ISNULL(Trgt.KommentarMarktTeam, '') <> ISNULL(Src.KommentarMarktTeam, '')
OR
ISNULL(Trgt.KommentarKommissionierung, '') <> ISNULL(Src.KommentarKommissionierung, '')
OR
ISNULL(Trgt.Rolli, '') <> ISNULL(Src.Rolli, '')
OR
ISNULL(Trgt.PositionErstellt, '') <> ISNULL(Src.PositionErstellt, '')
OR
ISNULL(Trgt.PositionGepackt, '') <> ISNULL(Src.PositionGepackt, '')
)
THEN
UPDATE SET
ID = Src.ID,
VerkaufsstellenID = Src.VerkaufsstellenID,
MarktDatum=Src.MarktDatum,
PLU=Src.PLU,
MengeGeplantKisten=Src.MengeGeplantKisten,
MengeGeplantInEinheit=Src.MengeGeplantInEinheit,
KommentarMarktTeam=Src.KommentarMarktTeam,
KommentarKommissionierung=Src.KommentarKommissionierung,
Rolli=Src.Rolli,
PositionErstellt=Src.PositionErstellt,
PositionGepackt=Src.PositionGepackt;
Zum Abschluss hier noch ein Datenbeispiel aus dbo.TempPacklisten:
Hat jemand eine Idee, wie der Fehler zustande kommt? Ich zerbreche mir seit Stunden den Kopf und probiere alles mögliche aus - leider bisher ohne Erfolg...
ich komme bei einer Fehlermeldung einfach nicht weiter, vielleicht hat jemand von euch ja eine Idee.
Es gibt zwei Tabellen, dbo.Packlisten und dbo.TempPacklisten. Mit der gespeicherten Prozedur dbo.MergePacklisten werden die Daten aus der Tabelle dbo.TempPacklisten mit der Tabelle dbo.Packlisten abgeglichen, dh. neue Daten in dbo.Packlisten eingefügt und bestehende Daten bei Bedarf aktualisiert. Gelöscht wird aus dbo.Packlisten nie etwas.
Die Prozedur hat immer fleißig ihren Dienst getan, bis ich die Spalte "MengeGeplantInEinheit" nachträglich hinzugefügt habe. Vom Aufbau her ist diese Spalte identisch zu der Spalte "MengeGeplantKisten". Dennoch erhalte ich beim Ausführen der Prozedur folgende Fehlermeldung:
Nachricht 8114, Stufe 16, Status 5, Prozedur dbo.MergePacklisten, Zeile 5 [Batchstartzeile 2]
Fehler beim Konvertieren des varchar-Datentyps in numeric.
Ich verstehe nicht, warum von einem varchar Datentyp gesprochen wird, wo doch in der Spalte nur decimal vorhanden ist. Der Fehler tritt auch auf, wenn ich testweise manuell Daten dbo.TempPacklisten eintrage.
Was mir aufgefallen ist: Das Einfügen funktioniert reibungslos. Solange dbo.Packlisten komplett leer ist, kann ich die Funktion problemlos durchlaufen lassen und die Werte werden übertragen. Erst wenn ich die Funktion starte und Werte in dbo.Packlisten aktualisiert werden müssen erscheint die Fehlermeldung.
Hier der Aufbau der beiden Tabellen - er ist bei dbo.Packlisten und dbo.TempPacklisten identisch:
Hier die gespeicherte Prozedur dbo.MergePacklisten:
set NOCOUNT on
MERGE dbo.Packlisten AS Trgt
USING dbo.Temp_Packlisten Src
ON Trgt.ID = Src.ID
WHEN NOT MATCHED BY TARGET THEN
INSERT (ID, VerkaufsstellenID, MarktDatum, PLU, MengeGeplantKisten, MengeGeplantInEinheit, KommentarMarktTeam, KommentarKommissionierung, Rolli, PositionErstellt, PositionGepackt)
VALUES (ID, VerkaufsstellenID, MarktDatum, PLU, MengeGeplantKisten, MengeGeplantInEinheit, KommentarMarktTeam, KommentarKommissionierung, Rolli, PositionErstellt, PositionGepackt)
WHEN MATCHED AND
(
ISNULL(Trgt.ID, '') <> ISNULL(Src.ID, '')
OR
ISNULL(Trgt.VerkaufsstellenID, '') <> ISNULL(Src.VerkaufsstellenID, '')
OR
ISNULL(Trgt.MarktDatum, '') <> ISNULL(Src.MarktDatum, '')
OR
ISNULL(Trgt.PLU, '') <> ISNULL(Src.PLU, '')
OR
ISNULL(Trgt.MengeGeplantInEinheit, '') <> ISNULL(Src.MengeGeplantInEinheit, '')
OR
ISNULL(Trgt.MengeGeplantKisten, '') <> ISNULL(Src.MengeGeplantKisten, '')
OR
ISNULL(Trgt.KommentarMarktTeam, '') <> ISNULL(Src.KommentarMarktTeam, '')
OR
ISNULL(Trgt.KommentarKommissionierung, '') <> ISNULL(Src.KommentarKommissionierung, '')
OR
ISNULL(Trgt.Rolli, '') <> ISNULL(Src.Rolli, '')
OR
ISNULL(Trgt.PositionErstellt, '') <> ISNULL(Src.PositionErstellt, '')
OR
ISNULL(Trgt.PositionGepackt, '') <> ISNULL(Src.PositionGepackt, '')
)
THEN
UPDATE SET
ID = Src.ID,
VerkaufsstellenID = Src.VerkaufsstellenID,
MarktDatum=Src.MarktDatum,
PLU=Src.PLU,
MengeGeplantKisten=Src.MengeGeplantKisten,
MengeGeplantInEinheit=Src.MengeGeplantInEinheit,
KommentarMarktTeam=Src.KommentarMarktTeam,
KommentarKommissionierung=Src.KommentarKommissionierung,
Rolli=Src.Rolli,
PositionErstellt=Src.PositionErstellt,
PositionGepackt=Src.PositionGepackt;
Zum Abschluss hier noch ein Datenbeispiel aus dbo.TempPacklisten:
Hat jemand eine Idee, wie der Fehler zustande kommt? Ich zerbreche mir seit Stunden den Kopf und probiere alles mögliche aus - leider bisher ohne Erfolg...