【发布时间】:2011-03-06 07:28:09
【问题描述】:
我需要一种有效的方法来传入参数 [StartingNumber] 并从 [StartingNumber] 依次计数,直到找到丢失的数字。
我使用下面的sql来获取下一个数字:
DECLARE @StartOffset int
SET @StartOffset = 23
; With Missing as (
select @StartOffset as N where not exists(
select * from [QUEUE] where QueueNum = @StartOffset AND ismelutash = 1)
), Sequence as
( select @StartOffset as N from [QUEUE] where QueueNum = @StartOffset
union all
select b.QueueNum from [QUEUE] b inner join Sequence s
on b.QueueNum = s.N + 1 and b.ismelutash = 1
)
select COALESCE((select N from Missing),(select MAX(N)+1 from Sequence))
它已经工作了一段时间,但现在当我运行它时,我得到 '语句终止。在语句完成之前,最大递归 100 已用完。'
有人有什么想法吗?谢谢
编辑:
我添加了 maxrecursion 但它只是加载而不返回数据:
DECLARE @StartOffset int
SET @StartOffset = 50
DECLARE @isMelutash int
SET @isMelutash = 0
; With QueueFilters as (
select queuenum from queue where ismelutash = 1
), Missing as (
select @StartOffset as N where not exists(select * from QueueFilters where queuenum = @StartOffset)
), Sequence as (
select @StartOffset as N from QueueFilters where queuenum = @StartOffset
union all
select b.queuenum from QueueFilters b inner join Sequence s on b.queuenum = s.N + 1
)
select COALESCE((select N from Missing ),(select MAX(N)+1 from Sequence ) )
**OPTION(MAXRECURSION 150)**
【问题讨论】:
标签: sql sql-server common-table-expression