插入数据时是否可能返回导致MSSQL中唯一键冲突的记录?
答案 0 :(得分:0)
尝试这种模式
select * from
(
--query used for your insert
) f1
where exists
(
select * from tablewhereyouwantinsert f2
where f1.key1=f2.key1 and f1.key2=f2.key2 ---- keys used into your unique key violation
)
答案 1 :(得分:0)
您可以使用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)
行。