我在SQL Server 2005中有一个遗留数据表,它有一个没有身份/自动增量的PK,没有实现它的能力.
因此,我不得不通过ole"SELECT MAX(id)+ 1 FROM table"-before-insert技术手动在ASP.NET中创建新记录.
显然,如果同时插入,这会在ID上产生竞争条件.
什么是优雅地解决比赛碰撞事件的最佳方式?我正在寻找检测碰撞的VB.NET或C#代码的想法,然后通过获得另一个max(id)+ 1来重新尝试失败的插入.可以这样做吗?
思考?评论?智慧?
谢谢!
注意:如果我无法以任何方式更改数据库怎么办?
使用标识列创建辅助表.在事务插入到aux表中,检索该值并使用它插入旧表中.此时,您甚至可以删除在aux表中插入的行,该点只是将其用作递增值的来源.