首页 > 解决方案 > 返回行,当唯一键变化发生时

问题描述

插入数据时是否可以返回导致 MSSQL 中唯一键冲突的记录?

标签: c#sql-server

解决方案


您可以使用MERGE单个语句有条件地从数据库中插入或检索行。

不幸的是,要获得检索操作,我们必须触及现有行,我假设这是可以接受的,并且您将能够构建一个影响较小的“No-Op” UPDATE,如下所示:

create table T (ID int not null primary key, Col1 varchar(3) not null)
insert into T(ID,Col1) values (1,'abc')

;merge T t
using (values (1,'def')) s(ID,Col1)
on t.ID = s.ID
when matched then update set Col1 = t.Col1
when not matched then insert (ID,Col1) values (s.ID,s.Col1)
output inserted.*,$action;

这会产生:

ID          Col1 $action
----------- ---- ----------
1           abc  UPDATE

包括该$action列可以帮助您知道这是一个现有的行而不是insert成功的行(1,def)


推荐阅读