【问题标题】:get list of unused ids获取未使用的 ID 列表
【发布时间】:2022-11-12 03:21:24
【问题描述】:

我们有当前表名为文章

id name
1 artikel_a
2 artikel_b
3 artikel_c

idnumeric(5, 0)

相似的文章具有非常相似的 ID 非常重要,因此我的客户希望在创建新文章记录时查看所有可能(当前未使用的)ID 编号的列表。这样他们就可以查看适合当前文章创建的范围。

如何在 SQL Server 中执行此操作?

【问题讨论】:

  • 所以最多有 99,999 个空位。似乎是一个很大的选择列表。
  • 在关系数据库中像这样操作 ID 值是一种糟糕的做法。让数据库管理它们!如果你真的需要显示具有相关 ID 的字段,您通常希望使用单独的列.
  • 它不是自动生成的 atm,我们正在从充满从未自动生成的 id 的 as400 过渡,现在当 as400 消失时,我们会转向自动生成,但我们不能 atm 公司存在 35 年了我们有一个非常有趣的数据库 atm,我们无法改变太多,因为 30 年前的混乱和错误的决定,以及一个需要与该系统正确通信的新系统 + 数据库
  • 感觉就像一个可用 ID 的差距和岛屿

标签: sql sql-server


【解决方案1】:

一种可能的解决方案

Declare @YourTable Table ([id] int,[name] varchar(50))  Insert Into @YourTable Values 
 (1,'aaa')
,(2,'bbb')
,(3,'ccc')
,(25,'ddd')
,(50,'eee')


Select R1 = min(N)
      ,R2 = max(N)
 From  (
        Select N
              ,Grp = N-row_number() over (order by N)
         From  (
                Select Top 99999 N=Row_Number() Over (Order By (Select NULL)) 
                 From  master..spt_values n1, master..spt_values n2
               ) src
         where not exists (Select 1 from  @YourTable where N=id)
       ) A
 Group By Grp 

可用 ID 的结果

R1  R2
4   24
26  49
51  99999

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多