我有一个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))
测试代码以验证它是否能正常工作的最佳方法是什么?
答案 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,因此您无法访问它。否则,请使用触发器。
我认为您的方法不适用于“完全”同时发出请求的两个用户。