【发布时间】:2017-03-27 00:25:15
【问题描述】:
对于我一直花时间在这方面的永恒,我似乎无法找到我的MERGE 语句插入重复行的原因。这是我的桌子。
TABLE INVENTORY
ProductID | ProductName | ProductCode | Quantity | Location
1 | Stabilo | Code123 | 3 | Basement
2 | Parker Pen | Code456 | 4 | Basement
TABLE INCOMINGSTOCKS
REQUESTNUMBER | ProductID | ProductName | ProductCode | Quantity | DeliveryLocation
Request123 | 2 | Parker Pen | Code456 | 3 | Basement
Request123 | 3 | Eraser | Code789 | 5 | Basement
一个请求编号 = 多个项目,就像一个快餐配送可以在一个交易编号中包含多个订单。
当我运行此查询时...
MERGE INVENTORY as T1
USING INCOMINGSTOCKS AS T2
ON T1.ProductCode = T2.ProductCode
AND T2.REQUESTNUMBER = 'Request123' and T2.DeliveryLocation= 'Basement'
WHEN MATCHED THEN
UPDATE SET T1.Quantity = T1.Quantity + T2.Quantity
WHEN NOT MATCHED THEN
INSERT (ProductID, ProductName, ProductCode, Quantity, Location)
VALUES (T2.ProductID, T2.ProductName, T2.ProductCode, T2.Quantity, T2.DeliveryLocation);
...它返回以下数据:
ProductID | ProductName | ProductCode | Quantity | Location
Stabilo | 1 | Code123 | 3 | Basement
Stabilo | 1 | Code123 | 3 | Basement
Parker Pen | 2 | Code456 | 7 | Basement
Parker Pen | 2 | Code456 | 4 | Basement
“橡皮擦”项目甚至没有被插入!它只复制了 Stabilo(不在 INCOMINGSTOCKS 表中,添加了 Parker Pens (3+4) 的数量,并用其初始数量再次重新插入。
请问,有人可以帮我吗?有关我的查询的任何见解或任何评论?有什么问题吗?
谢谢!!!
【问题讨论】:
-
可能在 yoir WHERE 子句中检查:ISNULL (T1.ProductCode,'') != ''
-
您发布的
merge声明甚至无效。你能发布你实际运行的那个吗? -
@sstan 我已经更正了合并语句,谢谢。
-
我仍然认为您实际上没有成功运行该语句。我收到
Incorrect syntax near the keyword 'WHERE'.错误。 -
抱歉,已将
where替换为and
标签: sql sql-server merge bulkinsert upsert