SQL Server 2008 R2-生成唯一编号

问题描述 投票:0回答:1

要求

我想要一种以连续顺序生成新的唯一编号(发票编号)的方法(生成新编号时不应遗漏任何编号)

有效示例:1、2、3、4

无效示例:1、2、4、3(不是连续的序列)

当前架构

这是表的现有表架构测试enter image description here

我想出的解决方案

经过一些研究,我想出了下面的代码,目前看来它可以正常工作。

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行],当前它也会为每个记录生成新的唯一值。enter image description here

主要问题

上面的代码可以得出重复的值吗?

我通过反复尝试的方法进行了尝试,并且当我深入研究Transaction Locking

时,它可以完美地运行BUT select语句为该语句生成Shared Lock整个表,这意味着它将允许并发事务访问相同的数据,对吧?

这意味着多个事务可以生成重复的值,对吧?

那我怎么还看不到任何重复的值?

编辑

按照大卫的评论我无法使用身份字段,因为无论如何如果我删除一条记录,那么我将很难填写该号码。

要求我想要一种以连续顺序生成新的唯一编号(发票编号)的方法(生成新编号时不应遗漏任何编号)有效示例:1、2、3、4无效...

sql-server transactions sql-server-2008-r2 locking
1个回答
-1
投票

这是可以创建您的贵族支票号码的程序

© www.soinside.com 2019 - 2024. All rights reserved.