2016-06-30 3 views
0

Ich habe ein Stück SQL geschrieben, die alte Referenznummern mit neuen übereinstimmen, und überschreiben sie.Bulk Aktualisieren von Referenznummern, 0 Datensätze aus Code

Der Zusammenhang dafür ist, dass wir über 3000 Rechnungen von einem Lieferanten mit der falschen Referenznummer erhalten haben. Sie haben mir die richtigen in einer Excel-Datei geliefert.

Ich habe eine neue Tabelle in unserer DB erstellt und die Daten der neuen Referenzen geladen. Ich laufe dann unten.

Ich lief dies zuerst durch eine UAT-Umgebung mit Testdaten und der Code hat genau das, was ich wollte. Aber wenn ich die unten laufen, halte ich 0.

Im Folgenden eine Rückkehr des Erhaltens der Code ich

bin mit
UPDATE a 
SET a.Refr1 = b.RefNEW 
FROM ESB_EDI_HEADERS AS a 
INNER JOIN Musgrave_EDI AS b ON a.Refr1 = b.RefOLD 

Kontext:

ESB_EDI_HEADERS Tabelle enthält alle unsere Rechnungen. Hier erhielten wir falsche Referenznummern auf Rechnungen.

Musgrave_EDI ist eine neue Tabelle, die ich gemacht habe, wo ich Daten aus einer Excel-Datei importiert habe.

Ich denke, es könnte ein Problem mit den Daten, die ich importierte, als wenn ich unten ausführen, bekomme ich keine Antworten zurück.

Hier versuche ich zu sehen, wo die vorhandenen Referenzen übereinstimmen, und auch hier bekomme ich keine Ergebnisse.

Schätzen Sie alle Hinweise oder Hilfe zu diesem Thema, ich denke, es ist ein Datenproblem, obwohl nicht sicher, wie ich die fraglichen Daten auf dieser Plattform teilen kann.

Unten finden Sie einige Beispieldaten aus den Tabellen

Musgrave_EDI TOP 10 * VON Musgrave_EDI

RefOLD  RefNEW 
C2300008338 0 
C2300008339 0 
C2300008340 0 
C2300027652 0 
C2300027653 0 
C2300027656 0 
C2300005878 7439 
C2300004652 8172 
C2300004653 8752 
C2300004654 9385 

ESB_EDI_HEADERS SELECT TOP 10 Sitecode SELECT, Lieferant, TrDate, Refr1, Refr2VONESB_EDI_HEaders WHERE DateImported> = '2016.05.01 00: 00: 00.000'

Sitecode Supplier TrDate   Refr1  Refr2 
5017 000011 2016-04-28 00:00:00.000 8228378422 E02591436 
5057 000011 2016-04-28 00:00:00.000    E02591454 
5012 000011 2016-04-25 00:00:00.000 78316997 E02591989 
5012 000011 2016-04-27 00:00:00.000 78344448 E02591990 
5012 000011 2016-04-29 00:00:00.000 78367685 E02591991 
5011 000011 2016-04-25 00:00:00.000 78314138 E02591992 
5011 000011 2016-04-28 00:00:00.000 78352647 E02591993 
5011 000011 2016-04-30 00:00:00.000 78376810 E02591994 
5013 000011 2016-04-25 00:00:00.000 78316973 E02592104 
5013 000011 2016-04-27 00:00:00.000 78343940 E02592105 
+0

verwenden, können Sie dies versuchen. UPDATE ESB_EDI_HEADERS SET Refr1 = b.RefNEW VON Musgrave_EDI AS b WHERE \t ESB_EDI_HEADERS.Refr1 = b.RefOLD – NEER

+0

dies versucht und erhielt auch eine 0 Datensätze zurückgegeben – Daniel

+0

können Sie einen Wert für 2 Tabellen hinzufügen? – NEER

Antwort

0

Does a.Refr1 und b.RefOLD den gleichen Datentyp haben? Das Problem liegt möglicherweise daran, dass die Spalte, der Sie beitreten, nicht übereinstimmt.

+0

Zunächst gab es ein Problem mit dem Datentyp mit der RefOLD (und RefNEW), ein Float und eine Dezimalzahl. Ich habe das gelöst und alle Datentypen sind jetzt nVARCHAR – Daniel

+0

Wie für Ihr Beispiel und da Sie keine Ergebnisse nach dem Schnittpunkt zwischen den 2 Tabellen hatten, bedeutet das, dass RefOLD keinen Verweis auf Refr1 hat. Deshalb haben Sie 0 Ergebnisse. –

+0

Ja, genau das denke ich. Ich habe versucht, die Daten auf mehrere Arten von Excel, CSV usw. zu laden. Kann nicht herausfinden, was das Problem ist, habe ich für Leerzeichen und dergleichen überprüft – Daniel

1

So bekam alles sortiert. Stellt sich heraus, dass die Details, die ich von einem Endbenutzer erhalten habe, falsch waren, so war es eigentlich Refr2, das im Join sein musste.

Danach begann ich Aufzeichnungen zu bekommen. Gab einige zusätzliche Probleme, aber das wurde aufgrund von Leerzeichen vom Anbieter verursacht.

So löste ich dieses Problem den Code unten

BEGIN TRAN 
UPDATE ESB_EDI_HEADERS 
SET Refr2 = b.Refer2 
FROM Musgrave_EDI AS b 
WHERE Refr2 =CONVERT(VARCHAR(30),b.Record) 
Verwandte Themen