Sri*_*Sri 1 t-sql sql-server merge
这是SQL查询:
MERGE tblProductsSold
USING tblOrders on tblOrders.OrderID = tblProductsSold.txtOrderID
WHEN NOT MATCHED THEN
Insert ( txtOrderID, txtOrderdate, txtPartno, txtQty)
values
(SELECT tblItemsOnOrder.txtOrderID,
tblOrders.txtDateTime,
tblItemsOnOrder.txtPartNO,
tblItemsOnOrder.txtQTY
FROM tblOrders INNER JOIN tblItemsOnOrder
ON tblOrders.OrderID = tblItemsOnOrder.txtOrderID
WHERE tblOrders.txtIsConfirmed = '1'
)
OUTPUT $action ;
Run Code Online (Sandbox Code Playgroud)
所需结果:需要导入表中Products
尚未包含的订单tblProductsSold
你不能像现在这样做而接近它.
该MERGE
语句合并两个表 - 您在标头中定义的两个表 - 源表和目标表.
现在,您正在使用tblOrders
您的来源和tblProducts
目标.仅此一点似乎很奇怪 - 您正在尝试将订单合并到产品中?似乎不太合适......
一旦定义了源表和目标表,就可以比较源中存在的行(或不存在).如果源中的给定行不在目标中 - 那么您可以将其值插入目标表中.
但这仅适用于源表中的直接列值!当你试图做的时候,你不能出去做子查询到其他表!
所以我相信你真正应该做的是:
作为您的来源 - 有一个视图,列出您的订单中找到的产品 - 产品(不是订单本身)
然后将您的Products
表与此视图进行比较- 如果您的订单碰巧有基Products
表中没有的任何产品- 请插入它们.
所以你需要这样的东西:
MERGE tblProductsSold AS Target
USING (SELECT tblItemsOnOrder.txtOrderID, tblOrders.txtDateTime,
tblItemsOnOrder.txtPartNO, tblItemsOnOrder.txtQty
FROM tblOrders
INNER JOIN tblItemsOnOrder ON tblOrders.OrderID = tblItemsOnOrder.txtOrderID
WHERE tblOrders.txtIsConfirmed = '1') AS Source
ON Source.OrderID = Target.txtOrderID
WHEN NOT MATCHED THEN
INSERT (txtOrderID, txtOrderdate, txtPartno, txtQty)
VALUES (Source.OrderID, Source.txtDateTime, Source.txtPartNo, Source.txtQty)
OUTPUT $action ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13992 次 |
最近记录: |