每天生成唯一的序列号

时间:2015-02-08 16:04:30

标签: sql serialization sql-server-2008-r2

我有一个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))

测试代码以验证它是否能正常工作的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

为什么您需要每天重启的ID?您可以在需要时随时计算:

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

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

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