数据库触发器或应用代码?在这种情况下我应该使用哪一个?

时间:2013-10-05 08:18:53

标签: c# sql-server triggers database-performance

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

提前致谢

1 个答案:

答案 0 :(得分:1)

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

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

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

select min(T.ID) + 1 from TableName T with(xlock)
     where not exists (select * from TableName T1 where T1.ID = T.ID + 1)