2017-02-21 3 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に戻って先頭のゼロを追加します私のC#プログラムでは長さが6(すべてのclnumは常に6桁です)で、それを表示します。しかし、先行ゼロを取り除いてから追加する方法はありますか?

+0

計算された列をテーブルに追加して、 'clnum'の整数値を提供することを検討しましたか?永続化および索引付けが可能です。 – HABO

+0

テーブルは私たちの会計システムの一部です。私はそれをすることは許されません。さもなければ、それはすばらしい考えです、ありがとう。 – Melanie

答えて

1

intに変換する前に先行ゼロを削除する必要はありません。変換中に自動的に行われます。 SQLを使用して

、あなたは簡単にだけ真の選択肢は、あなたがゼロを失うしないように、文字列としてテーブルに値を格納することですREPLACE(STR(FieldName,6),' ','0')

を使用して、その後それらを再度追加することができます。

+0

ありがとう! T-SQLでゼロを戻すことは私には起こりませんでした。あなたは私にいくつかのコードを保存しました。 – Melanie

関連する問題