我有一个带有列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#程序中显示出来。但是,有没有办法绕开前面的零,然后再添加回来?
您是否考虑过在表中添加计算列以提供'clnum'的整数值?它可以被保存并编入索引。 – HABO
该表是我们会计系统的一部分,我不会这样做。否则,这将是一个好主意,谢谢。 – Melanie