我有一个表,看起来像:MERGE查询和删除记录
AccountID, ItemID
1, 100
1, 200
2, 300
我有一个接受该更新与帐户相关联的项目的表值参数PROC。我们会通过类似如下:
AccountID, ItemID
3, 100
3, 200
体proc看起来像:
procedure dbo.MyProc(@Items as dbo.ItemListTVP READONLY)
AS
BEGIN
MERGE INTO myTable as target
USING @Items
on (Items.AccountId = target.AccountId)
AND (Items.ItemId = target.ItemId)
WHEN NOT MATCHED BY TARGET THEN
INSERT (AccountId, ItemId)
VALUES (Items.AccountId, Items.ItemId)
;
END
根据传入的数据我希望它2个新记录添加到表,它
。
我想要的是有一个WHEN NOT MATCHED BY SOURCE子句,它将删除不匹配的指定帐号的项目。
例如,如果我通过
AccountID, ItemID
1, 100
1, 400
然后,我希望它删除具有1个,200的纪录;但留下所有其他人。
如果我只是做:
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
然后它会删除所有记录不引用的帐户(即:帐户ID 2和3)。
我该怎么做?
谢谢,
第一个看起来很有希望,我会给它一个机会让你知道,第二个,我想我宁愿有一个单独的DELETE查询运行而不是执行CTE。原始查询比上面的示例稍微复杂一些。 – NotMe 2011-03-04 18:39:56
花了一段时间回到这个。 DELETE条件上的第一个选项非常完美。谢谢, – NotMe 2011-03-22 15:17:31
First One为我工作。 +1。 – 2016-10-25 02:52:43