我有一个带有主键字段 ID 的表。我不想使用身份,因为我需要为用户提供手动为新对象选择 ID 的可能性。所以我的想法是:
- 默认情况下,在编辑视图中,ID 字段将为 0。
- 如果用户不更改它,我需要找到第一个免费ID并使用它。
- 如果用户更改 ID,我首先需要检查是否有另一个具有该 id 的对象,在这种情况下会抛出错误。
- 如果没有,则使用用户选择的 ID。
- 创建新对象
问题是如何查询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(使用前将#替换为@)