我们经常使用Merge处理保存一个集合的情况,在更新一些关系表时非常常见:
1.集合中有并且数据库中也有,更新状态
2.集合中有,数据库中没有,插入
3.集合中没有,数据库中有的,删除
具体语法如下:
MERGE INTO [dbo].[Relation] AS R USING @Table AS T ON R.[GroupId] = @groupId AND R.Id = T.[Id] WHEN MATCHED THEN UPDATE SET R.[IsDel] = 0 WHEN NOT MATCHED THEN INSERT ..... VALUES..... WHEN NOT MATCHED BY SOURCE AND R.[GroupId] = @groupId THEN UPDATE SET R.[IsDel] = 1;
特别需要注意的是第3种,一定要控制好范围,否则会造成全表更新的情况!!!