如何在SQL Server列中找到最小的未使用数字?
我将要将大量手动记录的记录从Excel导入SQL Server表.它们都有一个数字ID(称为文档编号),但由于不再适用的原因,它们没有按顺序分配,这意味着从现在开始我的网站记录新记录时,需要为其分配最小的文档编号(尚未采取的大于零).
有没有办法通过纯SQL执行此操作,或者这是TSQL /代码的问题?
谢谢!
编辑
特别感谢WW提出并发问题.鉴于这是一个Web应用程序,它根据定义是多线程的,任何面临同样问题的人都应该考虑代码或数据库级别锁定来防止冲突.
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();
Run Code Online (Sandbox Code Playgroud)
nextNewNum == 5
我最近继承了一个数据库,其中一个表的主键由编码值组成(Part1*1000 + Part2).
我将该列标准化,但我无法更改旧值.所以现在我有
select ID from table order by ID
ID
100001
100002
101001
...
Run Code Online (Sandbox Code Playgroud)
我想找到表格中的"洞"(更准确地说,是100000之后的第一个"洞").
我正在使用以下选择,但是有更好的方法吗?
select /* top 1 */ ID+1 as newID from table
where ID > 100000 and
ID + 1 not in (select ID from table)
order by ID
newID
100003
101029
...
Run Code Online (Sandbox Code Playgroud)
该数据库是Microsoft SQL Server 2000.我可以使用SQL扩展.