2017-02-21 48 views
0

我有一個帶有列clnum的數據庫表,它是varchar。它是數字,但可以包含前導零。給定用戶在C#.Net程序中輸入數字X,我需要確定表中不存在的下一個數字,並將其顯示給用戶。這是SQL Server 2008中有什麼我能做的就是去掉所有前導零,通過所產生的數量的T-SQL存儲過程,而做到這一點:帶字符串的T-SQL間隙

CREATE PROCEDURE [dbo].[getNextClientNum] 

@ModelNumber AS int 
AS 

;WITH UsedNumbers (clnum, clname1) 

AS 

(
    SELECT clnum, clname1 
    FROM QueuedClientMatters 
), 

OrderedNumbers (clnum, clnum_int, clname1) 
AS 
(
    SELECT TOP 500000 clnum, CAST(clnum AS int) AS clnum_int, clname1 
    FROM UsedNumbers 
    WHERE CAST(clnum AS int) > @ModelNumber 
    ORDER BY clnum 
) 

SELECT TOP 1 previd 
FROM (SELECT clnum_int, LAG(clnum_int) OVER (ORDER BY clnum) previd 
FROM OrderedNumbers) q 
WHERE previd <> clnum_int - 1 
ORDER BY clnum_int 

我會再加入前導零回previd如此它的長度是6(所有clnums總是6位數)在我的C#程序中顯示出來。但是,有沒有辦法繞開前面的零,然後再添加回來?

+0

您是否考慮過在表中添加計算列以提供'clnum'的整數值?它可以被保存並編入索引。 – HABO

+0

該表是我們會計系統的一部分,我不會這樣做。否則,這將是一個好主意,謝謝。 – Melanie

回答

1

在轉換爲int之前,您不需要去掉前導零,這將在轉換過程中自動發生。

使用SQL,你可以輕鬆地添加他們回來以後使用REPLACE(STR(FieldName,6),' ','0')

唯一真正的選擇是在表中的值存儲爲一個字符串,所以你不鬆零。

+0

謝謝!我沒有想到在T-SQL中添加零。你爲我節省了一些編碼。 – Melanie