1

使用 c# 和 mssql 2008 R2,我有一个将用户插入系统的服务,用户分配了一个唯一编号,类似于 a1、b1 或 c1,在用户插入时会增加,但在插入之前我必须检查是否有任何以前的唯一号码可用(唯一号码可以在用户删除时删除)。例如,如果数据库中有 5 个用户,a1,...,a5 被保留,如果您删除让我们说第 3 个用户,那么 a3 将可用于下一个用户插入。这可以很容易地完成,但由于我必须在每次插入时读取可用的唯一编号,我很困惑在插入之前使用插入触发器还是使用应用程序代码更好?

提前致谢

4

1 回答 1

1

我不确定触发器以及您希望如何以这种方式执行此操作,但您绝对可以在代码/存储过程中实现这一点。这将是一个两步过程,必须在一个事务中:

  • 选择最小可用 ID
  • 插入新记录

一件重要的事情是,您需要在选择查询期间锁定表,以防止其他进程获得相同的 ID。您可以使用独占锁定提示来做到这一点。代码可能如下所示:

select min(T.ID) + 1 from TableName T with(xlock)
     where not exists (select * from TableName T1 where T1.ID = T.ID + 1)
于 2013-10-05T08:37:14.193 回答