我编写了一段SQL,用于将旧参考号与新参考号匹配,并覆盖它们。
这方面的背景是我们收到来自供应商的3000多张发票,参考编号不正确。他们在Excel文件中为我提供了正确的文件。
我在数据库中创建了一个新表,并加载了新引用的数据。我正在运行以下。
我首先通过带有测试数据的UAT环境运行它,代码完全符合我的要求。但是当我运行下面的时候,我会一直得到0。
以下是我正在使用的代码
UPDATE a
SET a.Refr1 = b.RefNEW
FROM ESB_EDI_HEADERS AS a
INNER JOIN Musgrave_EDI AS b ON a.Refr1 = b.RefOLD
上下文:
ESB_EDI_HEADERS
表包含我们的所有发票。这是我们在发票上收到错误参考号的地方。
Musgrave_EDI
是我制作的新表,我从Excel文件导入数据。
我认为我导入的数据可能存在问题,因为当我运行以下内容时,我得不到回复。
SELECT Refr1
FROM ESB_EDI_Headers
INTERSECT
SELECT RefOLD
FROM Musgrave_EDI
在这里,我试图查看现有引用的匹配位置,但我在这里也没有得到任何结果。
感谢任何指导或帮助,我觉得这是一个数据问题,虽然我不确定如何在这个平台上分享有问题的数据。
以下是表格中的一些示例数据
Musgrave_EDI 选择前10 * 来自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 选择TOP 10 Sitecode, 供应商, TrDate, Refr1, Refr2 来自ESB_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 :(得分:1)
所以这一切都排序了。事实证明我从最终用户收到的细节不正确,因此实际上Refr2需要加入。
在此之后我开始回复记录。是一些其他问题,但这是由于供应商提供的空白造成的。
所以我使用下面的代码解决了这个问题
BEGIN TRAN
UPDATE ESB_EDI_HEADERS
SET Refr2 = b.Refer2
FROM Musgrave_EDI AS b
WHERE Refr2 =CONVERT(VARCHAR(30),b.Record)
答案 1 :(得分:0)
a.Refr1和b.RefOLD是否具有相同的数据类型?问题可能是因为您要加入的列彼此不匹配。