我需要一種有效的方法來傳入參數[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)**
非常感謝幫助我,一個問題,我把MAXRECURSION和它的加載無限沒有返回數據。如果遞歸是99,它是即時的,但是101或0,它需要永遠。有任何想法嗎?此外,我沒有在SQL中這麼先進,我將如何實現計數表? – Eitan 2011-03-06 08:47:46
因爲它是遞歸:-)這就是爲什麼你有2個無遞歸的答案... – gbn 2011-03-06 08:49:17
它看起來像你的代碼中有一個錯誤:Tally應該加入Queue左連接,而不是內連接。此外,還有一個語法錯誤:並重復。 – 2011-03-06 19:24:24