每天生成唯一的序列号

问题描述:

我有一个SQL Server 2008 R2应用程序需要创建一个唯一的序列号,每天重新启动1。所以表中有一个使用Julian日期和序列号的复合主键。我将有一个存储过程来查找下一个序列号 - 如何保证两个用户不会获得相同的编号?每天生成唯一的序列号

这是行不通的?

INSERT INTO tbl_test (sn1, sn2) 
VALUES (1, (SELECT isnull(max(sn2) + 1,1) 
      FROM tbl_test 
      WHERE sn1 = 1)) 

什么是最好的方式来测试代码,以验证它会正常工作?

为什么你需要一个每天重新启动的ID?你可以在需要时随时计算它:

select t.*, 
     row_number() over (partition by cast(CreatedAt as date) order by id) as DayId 
from table t; 

如果你确实想要保证,我建议你使用一个序列。但是,唉,您正在使用SQL Server 2008,因此您无法访问它。否则,请使用触发器。

我不认为你的方法适用于两个用户在“完全”同时发出请求。

+1

序列号必须每天重新开始,因为一堆赚得比我多的人会这样说。推动这一决定不是一种选择。你能解释一下触发器如何解决问题吗?谢谢。 – JPoole 2015-02-08 16:37:37