【发布时间】:2011-07-09 00:06:30
【问题描述】:
我有一张看起来像这样的表格:
AccountID, ItemID
1, 100
1, 200
2, 300
我有一个接受表值参数的过程,该参数更新与帐户关联的项目。我们将传递如下内容:
AccountID, ItemID
3, 100
3, 200
过程看起来像:
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)。
我该怎么做?
谢谢,
【问题讨论】:
标签: sql-server tsql merge sql-server-2008-r2