是否可以使用以下约束执行插入或更新:
- 项目中使用了Dapper
- 主键是自动递增正数
- 新插入的数据可能没有PK 值(或值为
0
) - 数据需要在新插入的行上有 PK 值。
- 查询是按程序生成的,最好对其进行概括
就像是 :
int newId = db.QueryValue<int>( <<insert or update>>, someData );
我已经阅读了不同的解决方案,最好的解决方案似乎是这个:
merge tablename as target
using (values ('new value', 'different value'))
as source (field1, field2)
on target.idfield = 7
when matched then
update
set field1 = source.field1,
field2 = source.field2,
...
when not matched then
insert ( idfield, field1, field2, ... )
values ( 7, source.field1, source.field2, ... )
但
- 它似乎在第三个约束上失败了
- 它不保证返回新生成的 id。
由于第五个约束(或偏好),存储过程似乎过于复杂。
有哪些可能的解决方案?谢谢!