如何从SQL Server获取"下一个可用号码"?(不是标识列)

Chr*_*ian 3 sql-server sql-server-2008

技术:SQL Server 2008

所以我尝试了一些我在SO上找到的选项,但没有真正为我提供明确的答案.

我有一个包含两列的表,(Transaction ID,GroupID),其中没有唯一值.例如:

TransID | GroupID
-----------------
23      | 4001
99      | 4001
63      | 4001
123     | 4001   
77      | 2113
2645    | 2113
123     | 2113
99      | 2113   
Run Code Online (Sandbox Code Playgroud)

最初,groupID是由用户随机选择的,但现在我们正在自动化它.事实是,我们保留现有数据库而不对现有数据进行任何更改(工作太多,收益太少)

有没有办法在表"GroupTransactions"上查询"GroupID"以获取GroupID> 2000的下一个可用值?

Jon*_*ton 8

我想从下一个可用的问题开始,尽管可能与max + 1不一样吗?- 在这种情况下:

从整数列表开始,查找groupid列中不存在的那些,例如:

;WITH CTE_Numbers AS (
    SELECT n = 2001
    UNION ALL
    SELECT n + 1 FROM CTE_Numbers WHERE n < 4000 
)
SELECT top 1 n 
FROM CTE_Numbers num
WHERE NOT EXISTS (SELECT 1 FROM MyTable tab WHERE num.n = tab.groupid)
ORDER BY n
Run Code Online (Sandbox Code Playgroud)

注意:您需要调整2001/4000CTE中的值以允许您想要的范围.我假设你的桌子的名字MyTable