如何找到 SQL Server 列中最小的未使用数字?
我即将将大量手动记录的记录从 Excel 导入到 SQL Server 表中。它们都有一个数字 ID(称为文档编号),但由于不再适用的原因,它们没有按顺序分配,这意味着从现在开始,当我的网站记录新记录时,需要为其分配尽可能小的文档编号(大于零)尚未被采取。
有没有办法通过纯 SQL 来做到这一点,或者这是 TSQL/代码的问题吗?
谢谢!
编辑
特别感谢WW提出并发问题。鉴于这是一个网络应用程序,根据定义它是多线程的,任何面临同样问题的人都应该考虑使用代码或数据库级锁来防止冲突。
LINQ
仅供引用 - 这可以通过 LINQ 使用以下代码来完成:
var nums = new [] { 1,2,3,4,6,7,9,10};
int nextNewNum = (
from n in nums
where !nums.Select(nu => nu).Contains(n + 1)
orderby n
select n + 1
).First();
下一个新数 == 5
最佳答案
查找第一行不存在Id + 1的行
SELECT TOP 1 t1.Id+1
FROM table t1
WHERE NOT EXISTS(SELECT * FROM table t2 WHERE t2.Id = t1.Id + 1)
ORDER BY t1.Id
编辑:
为了处理现有的最低 id 不为 1 的特殊情况,这里有一个丑陋的解决方案:
SELECT TOP 1 * FROM (
SELECT t1.Id+1 AS Id
FROM table t1
WHERE NOT EXISTS(SELECT * FROM table t2 WHERE t2.Id = t1.Id + 1 )
UNION
SELECT 1 AS Id
WHERE NOT EXISTS (SELECT * FROM table t3 WHERE t3.Id = 1)) ot
ORDER BY 1
关于sql - 查找 SQL Server 中最小的未使用数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/684106/