【发布时间】:2016-08-31 22:46:11
【问题描述】:
我从 UI 将数据表传递给存储过程。该参数的类型是具有以下结构的用户定义表字段
Personkey int
ComponentKey varchar
这些数据需要入表,表中存在但datatable中没有的数据要删除。
示例表数据
PersonKey ComponentKey
123 A1
456 B9
我的数据表有 2 行,1 行匹配,1 新行
数据表数据示例
PersonKey ComponentKey
123 A1
786 Z6
结果是456/B9行应该被删除,123/A1行什么都没有发生,786/Z6行应该被插入。
我相信我可以使用 MERGE 语句,但我不知道如何形成它。
我知道 WHEN NOT MATCHED 我应该进行插入,但删除部分从哪里进入?
MERGE Components
USING @passedInData
ON PersonKey = DatatblPersonKey AND ComponentKey = DatatblComponentKey
WHEN MATCHED THEN
-- DO nothing...
WHEN NOT MATCHED
INSERT (PersonKey, ComponentKey) VALUES (DatatblPersonKey, DatatblComponentey);
编辑:为了清楚起见,数据表可以包含许多行相同的人键,但组件键会不同。
数据表数据示例
PersonKey ComponentKey
123 Z6
123 C5
示例表数据
PersonKey ComponentKey
123 A1
456 B9
插入上述数据表后的结果应该是
PersonKey ComponentKey
123 Z6
123 C5
456 B9
请注意,123/A1 已被删除,而 456/B9 仍在表格中。
【问题讨论】:
标签: sql-server datatable sql-merge