c# - 返回行,当唯一键变化发生时
问题描述
插入数据时是否可以返回导致 MSSQL 中唯一键冲突的记录?
解决方案
您可以使用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)
。
推荐阅读
- jquery - 在 jquery 中使用输入单元格将多个表导出为单个 excel
- optimization - 有没有办法在运行时确定 AnyLogic 中 ResourcePool 的容量?
- android-studio - 我需要帮助使用 github Action 向 Codecov 发送 Android 代码覆盖率
- api - UrlfetchApp 捕获异常
- arrays - 高级语言 [eg: c#, javascript, python ....] 如何创建数组
- spring - 我无法使用 springboot 提供在资源文件夹中保存图像的路径
- firebase - 如何在作为列表存储在 Firestore 字段中时为键具有唯一值
- swift - 在 Xcode 项目中本地添加 Swift 包依赖
- python - Keras中的词袋嵌入层?
- python - 如何在 Peewee 中使用历史记录表进行版本控制?