C# SQL Server对开本列使用什么(用于具有标识列)

C# SQL Server对开本列使用什么(用于具有标识列),c#,sql-server,asp.net-mvc,entity-framework,C#,Sql Server,Asp.net Mvc,Entity Framework,我有一个表,它的主键是一个标识列,我用它作为我的“对开本”在报告中显示它的值 如果insert语句失败,SQL Server的默认行为是自动增加“我的标识”列的种子,因此,当用户有一个带有对开本1000的报表,而下一个报表是对开本1004时,用户会感到困惑(因为可能有3个insert失败) 那么,在web应用程序中创建对开本列并对其进行管理的最佳方法是什么 在进行保存之前,我先到我的表中获取我的对开本列,在服务器端自动递增该列,然后将其保存到db以用于新记录,这是一种好的做法吗?我担心并发性,因

我有一个表,它的主键是一个标识列,我用它作为我的“对开本”在报告中显示它的值

如果
insert
语句失败,SQL Server的默认行为是自动增加“我的标识”列的种子,因此,当用户有一个带有对开本1000的报表,而下一个报表是对开本1004时,用户会感到困惑(因为可能有3个insert失败)

那么,在web应用程序中创建对开本列并对其进行管理的最佳方法是什么

在进行保存之前,我先到我的表中获取我的
对开本列
,在服务器端自动递增该列,然后将其保存到db以用于新记录,这是一种好的做法吗?我担心并发性,因为如果在同一秒中,两个用户获得相同的对开本编号,那么问题是我将有两个相同编号的报告


感谢您的建议。

向用户显示ID列几乎总是一种不好的做法。如果你有任何类型的数据库问题或升级,他们所有的参考号都是错误的。最好创建您自己的id。在另一个表中放置一个值,并在成功插入时递增。如果您使用sql server 2012或更高版本,则可以使用,不要担心间隙-它们真的不是问题!是的,把它放在交易中,@marc_s的观点也很重要。让你的用户习惯于有差距。他们没什么大不了的。@marc_你说得有道理。:)