我怎样才能从表中获得第一个免费ID

2024-04-27

我有一个带有主键字段 ID 的表。我不想使用身份,因为我需要为用户提供手动为新对象选择 ID 的可能性。所以我的想法是:

  1. 默认情况下,在编辑视图中,ID 字段将为 0。
  2. 如果用户不更改它,我需要找到第一个免费ID并使用它。
  3. 如果用户更改 ID,我首先需要检查是否有另一个具有该 id 的对象,在这种情况下会抛出错误。
  4. 如果没有,则使用用户选择的 ID。
  5. 创建新对象

问题是如何查询SQL Server表来获取第一个空闲ID号?

示例1:

ID
--
1
2
10

第一个免费ID是3

示例2:

ID
--
1
2
3
4

第一个免费ID是5

有没有办法做到这一点? 我能想到的就是获取最小值和最大值,为可能的值创建一个循环,然后与表数据进行比较,但它涉及对数据库的太多查询。 谢谢!


您可以找到第一个空闲 id 作为第一个 id,其中没有“下一个”值:

select coalesce(min(t.id) + 1, 0)
from table t left outer join
     table t2
     on t.id = t2.id - 1
where t2.id is null;

EDIT:

如果您想将“1”处理为潜在的缺失值:

select (case when min(minid) > 1 then 1 else coalesce(min(t.id) + 1, 0) end)
from table t left outer join
     table t2
     on t.id = t2.id - 1 cross join
     (select min(id) as minid from table t) const
where t2.id is null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我怎样才能从表中获得第一个免费ID 的相关文章

随机推荐

  • 访问容器管理 Bean 中的事务状态

    我有一个 Stateless EJB http en wikipedia org wiki Enterprise JavaBean使用容器管理的事务 有没有办法访问 状态 javax transaction UserTransaction
  • 监控当前运行的应用程序

    我遇到了一个暂时无法解决的问题 该代码的目的是监视当前正在运行哪些应用程序 我使用了以下代码并记录了生成的包名称 它起作用了 ActivityManager am ActivityManager context getSystemServi
  • array_search 返回错误的键[重复]

    这个问题在这里已经有答案了 我有这个数组 ar key1 gt John key2 gt 0 key3 gt Mary 并且 如果我写 idx array search Mary ar echo idx I get key2 我在网上搜索过
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 网站上出现奇怪的符号(L SEP)?

    我在我的网站上注意到 http www cscc org sg http www cscc org sg 出现了这个奇怪的符号 上面写着 L SEP 在 HTML 代码中 它显示相同的内容 有人可以告诉我如何删除它们吗 那个角色是U 202
  • gcc 不会编译和运行 MySQL C 库

    include
  • 将多个 CSV 文件复制到 postgres

    我正在编写一个 SQL 脚本来将多个 CSV 文件复制到 postgres 数据库中 如下所示 COPY product title department from ys csv CSV HEADER 我有多个文件想要复制 我不想要 COP
  • 我可以编辑 UIImage 属性 CGImage 的像素吗

    UIImage有一个只读属性CGImage 我必须将其像素读取到内存块并对其进行编辑 然后制作一个新的 UIImage 来替换旧的 我想知道是否有办法绕过只读属性并直接编辑这些像素 Thanks 谢谢大家 我找到了一种方法来做到这一点 使用
  • Pytorch ValueError:优化器得到一个空参数列表

    当尝试创建神经网络并使用 Pytorch 对其进行优化时 我得到了 ValueError 优化器得到一个空参数列表 这是代码 import torch nn as nn import torch nn functional as F fro
  • git 项目与存储库,根本区别是什么?

    我有两个项目当前使用 SVN 我正在迁移到 git 我注册了 gitorious 并且可以选择创建新项目或添加存储库 我刚刚开始使用 git 所以我不知道有什么区别 或者更确切地说 如果我只是在一个项目下使用存储库 这意味着什么 如果我这样
  • 快速循环中的并行异步执行

    我的快速代码如下所示 var jsFriendlyFreinds JSObject for friend in friends let jsFriend await FriendsPlugin createFriendResult frie
  • 方案语言:合并两个数字

    如何将列表中的两个整数合并为一个 方案中 例子 11 223 gt 11223 假设列表恰好有两个元素 并且都是数字 define merge numbers lst let 1st number gt string first lst 2
  • 在 angular2 中使用 routerLink 更新模板

    当我移动到另一个模板时 我遇到了模板未更新的问题store location 例如 默认值为Eastleigh如果我搬到USA它将更改为USA但当我去其他地方时它就粘住了USA 我必须刷新页面以便模板更新Collection Store 事
  • 提取两个段落之间的共同词?

    如何提取php5中两个或多个段落之间的常用词 我想总结每个文本以创建排名靠前的单词列表可能会起作用 然后比较它们 我想最基本的方法是 split each paragraph into an array of words using eit
  • Discord 音乐机器人 VoiceClient' 对象没有属性 'create_ytdl_player'

    我想编写自己的不和谐机器人 它可以播放 youtube 上的一些歌曲 但它不会创建 ydl 播放器 这是错误Command raised an exception AttributeError VoiceClient object has
  • List 和 List 之间的区别[重复]

    这个问题在这里已经有答案了 我读过很多这方面的内容 我知道 List listOfObject new ArrayList
  • Firebase ios sdk 异步和线程

    有谁知道使用 Firebase iOS SDK 远程调用 Firebase 是使用主线程还是后台线程 我在文档中找不到任何内容 Firebase 并没有完全消除对线程的担忧 由于 Firebase 回调始终在主线程上返回 因此从后台线程调用
  • WCF maxBytesPerRead 限制为 4096

    我在流模式下使用基本的 WCF Web 服务从服务器下载文件 我已将服务器端的绑定指定为
  • IISreset和应用程序池回收对缓存的影响有什么区别

    我遇到了一个奇怪的问题 据我所知 可以通过回收应用程序池来清除缓存 然而 在最近的一个项目中 缓存并没有以这种方式清除 相反 我们必须重置 IIS 以清除缓存 这些行为之间有什么区别 造成我所经历的差异的原因可能是什么 当您回收AppPoo
  • 我怎样才能从表中获得第一个免费ID

    我有一个带有主键字段 ID 的表 我不想使用身份 因为我需要为用户提供手动为新对象选择 ID 的可能性 所以我的想法是 默认情况下 在编辑视图中 ID 字段将为 0 如果用户不更改它 我需要找到第一个免费ID并使用它 如果用户更改 ID 我