使用 c# 和 mssql 2008 R2,我有一个将用户插入系统的服务,用户分配了一个唯一编号,类似于 a1、b1 或 c1,在用户插入时会增加,但在插入之前我必须检查是否有任何以前的唯一号码可用(唯一号码可以在用户删除时删除)。例如,如果数据库中有 5 个用户,a1,...,a5 被保留,如果您删除让我们说第 3 个用户,那么 a3 将可用于下一个用户插入。这可以很容易地完成,但由于我必须在每次插入时读取可用的唯一编号,我很困惑在插入之前使用插入触发器还是使用应用程序代码更好?
提前致谢
使用 c# 和 mssql 2008 R2,我有一个将用户插入系统的服务,用户分配了一个唯一编号,类似于 a1、b1 或 c1,在用户插入时会增加,但在插入之前我必须检查是否有任何以前的唯一号码可用(唯一号码可以在用户删除时删除)。例如,如果数据库中有 5 个用户,a1,...,a5 被保留,如果您删除让我们说第 3 个用户,那么 a3 将可用于下一个用户插入。这可以很容易地完成,但由于我必须在每次插入时读取可用的唯一编号,我很困惑在插入之前使用插入触发器还是使用应用程序代码更好?
提前致谢
我不确定触发器以及您希望如何以这种方式执行此操作,但您绝对可以在代码/存储过程中实现这一点。这将是一个两步过程,必须在一个事务中:
一件重要的事情是,您需要在选择查询期间锁定表,以防止其他进程获得相同的 ID。您可以使用独占锁定提示来做到这一点。代码可能如下所示:
select min(T.ID) + 1 from TableName T with(xlock)
where not exists (select * from TableName T1 where T1.ID = T.ID + 1)