我在MS SQL中创建一个存储过程/函数,它应该返回缺少的序列。
示例:
表“orders”包含字段名称“ordNo”。
ordNo
000001
000003
000005
函数应该返回这些值:
000002
000004
任何想法?
非常感谢你。答案 0 :(得分:1)
如此简单的事情:
SELECT ordNo - 1
FROM Orders o
WHERE NOT EXISTS (
SELECT *
FROM Orders n
WHERE n.ordNo = o.OrdNo - 1
)
AND ordNo > 1
编辑:啊 - 这不会在系列中找到错过的“跑步”。只有一个缺失的数字。
这是一个我认为至少会找到“缺失”订单号的“从”和“到”值的版本:
SELECT (SELECT MAX(ordNo) + 1 FROM Orders m WHERE m.ordNo < o.OrdNo) fromOrdNo,
(ordNo - 1) toOrdNo
FROM Orders o
WHERE NOT EXISTS (
SELECT *
FROM Orders n
WHERE n.ordNo = o.OrdNo - 1
)
AND ordNo > 1
答案 1 :(得分:0)
它的伪代码如下:
1.从00001开始
2.增加1并检查表中是否存在(ordNo)。
3.如果不存在,请返回该号码,否则重复该过程。
答案 2 :(得分:0)
以下示例可能会有所帮助。
-- the table that will have rows numbered from 1 to 1000
select top 1000 identity(int,1,1) as id into #X from syscolumns
-- the table with missing values
select top 200 identity(int,1,2) as id into #Y from syscolumns
-- select * from #x
-- select * from #y
select #x.id, #y.id from #x
left outer join #y on #x.id = #y.id
where #y.id is null
你应该有一个像#x这样的临时表,它将包含所有值(包括行的最大值)。在上面的例子中,我假设范围是从1到1000。