我想要一种以连续顺序生成新的唯一编号(发票编号)的方法(生成新编号时不应遗漏任何编号)
有效示例:1、2、3、4
无效示例:1、2、4、3(不是连续的序列)
经过一些研究,我想出了下面的代码,目前看来它可以正常工作。
DECLARE @i as int=0
While(@i<=10000 * 10000)
BEGIN
Begin Transaction
Insert Into Test(UniqueNo,[Text])values((Select IsNull(MAX(UniqueNo),0)+1 from Test with (TABLOCK)),'a')
COMMIT
SET @i = @i + 1;
END
我尝试从您可以说的12个不同的SQL查询或12个线程中运行代码,并且即使插入162,921行],当前它也会为每个记录生成新的唯一值。
上面的代码可以得出重复的值吗?
我通过反复尝试的方法进行了尝试,并且当我深入研究Transaction Locking
时,它可以完美地运行BUT select语句为该语句生成Shared Lock整个表,这意味着它将允许并发事务访问相同的数据,对吧?这意味着多个事务可以生成重复的值,对吧?
那我怎么还看不到任何重复的值?
按照大卫的评论我无法使用身份字段,因为无论如何如果我删除一条记录,那么我将很难填写该号码。
要求我想要一种以连续顺序生成新的唯一编号(发票编号)的方法(生成新编号时不应遗漏任何编号)有效示例:1、2、3、4无效...
这是可以创建您的贵族支票号码的程序