sql - 删除项目“WHEN NOT MATCHED BY SOURCE”
问题描述
需要一点帮助,请
这是我的表结构。表: Purchase_Master
Purchase_ID | POTYPE | PoNo
1 M 1
表:TRN_Purchase_Details
Purchase_Detail_ID | Purchase_ID | Head_ID | Item_ID
1 1 2 3
2 1 2 3
3 1 2 3
我将 XML 字符串传递给 SQL 以进行插入、更新和删除操作。
@PurchaseDetailsXML 的插入模式 XML 字符串
<documentelement>
<TRN_Purchase_Details>
<Purchase_Detail_ID> 0</Purchase_Detail_ID>
<Purchase_ID></Purchase_ID>
<Head_ID>2</Head_ID>
<Item_ID>3</Item_ID>
</TRN_Purchase_Details>
<TRN_Purchase_Details>
<Purchase_Detail_ID> 0</Purchase_Detail_ID>
<Purchase_ID></Purchase_ID>
<Head_ID>2</Head_ID>
<Item_ID>3</Item_ID>
</TRN_Purchase_Details>
<TRN_Purchase_Details>
<Purchase_Detail_ID> 0</Purchase_Detail_ID>
<Purchase_ID></Purchase_ID>
<Head_ID>2</Head_ID>
<Item_ID>3</Item_ID>
</TRN_Purchase_Details>
</documentelement>
@PurchaseDetailsXML 的更新模式 XML 字符串
<documentelement>
<TRN_Purchase_Details>
<Purchase_Detail_ID>1</Purchase_Detail_ID>
<Purchase_ID>1</Purchase_ID>
<Head_ID>2</Head_ID>
<Item_ID>3</Item_ID>
</TRN_Purchase_Details>
<TRN_Purchase_Details>
<Purchase_Detail_ID>3</Purchase_Detail_ID>
<Purchase_ID>1</Purchase_ID>
<Head_ID>2</Head_ID>
<Item_ID>3</Item_ID>
</TRN_Purchase_Details>
</documentelement>
这是“TRN_Purchase_Details”表的解析字符串:
SELECT Tbl.Col.value('Purchase_Detail_ID[1]', 'int') AS Purchase_Detail_ID ,
Tbl.Col.value('Purchase_ID[1]', 'int') AS Purchase_ID ,
Tbl.Col.value('Head_ID[1]', 'int') AS Head_ID ,
Tbl.Col.value('Item_ID[1]', 'int') AS Item_ID
INTO #TRN_Purchase_Details
FROM @PurchaseDetailsXML.nodes('/documentelement/TRN_Purchase_Details') Tbl ( Col )
这是我的插入更新删除代码:
MERGE TRN_Purchase_Details MTD
USING
( SELECT Purchase_Detail_ID ,
Id AS Purchase_ID ,
Head_ID ,
Item_ID
FROM #TRN_Purchase_Details
LEFT JOIN @ChangeResult ON 1 = 1
) AS TMTD
ON MTD.Purchase_Detail_ID = TMTD.Purchase_Detail_ID
AND MTD.Purchase_ID = TMTD.Purchase_ID
WHEN MATCHED THEN
UPDATE SET MTD.Head_ID = TMTD.Head_ID ,
MTD.Item_ID = TMTD.Item_ID
WHEN NOT MATCHED BY TARGET THEN
INSERT ( Purchase_ID ,
Head_ID ,
Item_ID
)
VALUES ( Purchase_ID ,
Head_ID ,
Item_ID
)
WHEN NOT MATCHED BY SOURCE
AND
MTD.Purchase_Detail_ID NOT IN(SELECT Purchase_Detail_ID FROM #TRN_Purchase_Details)
THEN
DELETE ;
我想要的是 :
我第一次在“TRN_Purchase_Details”中插入 3 个条目。第二次当我通过 2 个条目然后删除剩余的条目。
我的英语很差。
谢谢
解决方案
推荐阅读
- unicode - 在 Rust 中将 unicode 字符串转换为 NFC
- python - tuple' 对象没有属性 'append' 而它不是元组
- python - 为什么多处理中的池类没有优于线性处理
- javascript - 如何使用 React 钩子回调嵌套函数内的函数
- python - Linux。连接到 Oracle。cx_Oracle.DatabaseError:DPI-1047 找不到 64 位 Oracle 客户端库:“libclntsh.so
- redis - 如何在不同的机器上创建 Redis 集群?
- r - 使用 %in% 对 data.table 进行子集化
- mongodb - 从 mongo 中检索深度嵌套的值
- react-native - react-native 从 uri 文件中获取数据
- sql - 如何插入行作为记录类型“标题”,数据收集标识符为 YYYY/N,行数并将此行作为 END HEADER 标记关闭