0

私のテーブルがあります:

ID  code(varchar)
1   006
2   008
3   005
4   010
5   002

ストアド プロシージャを作成しました。

CREATE PROC pp
    @code VARCHAR(10),
    @new_code VARCHAR(10) OUTPUT
AS
BEGIN 
    SELECT TOP 1 @new_code = RIGHT(1000+code+1,3) 
    FROM tb AS a 
    WHERE [Code] >= @code
    AND NOT EXISTS (SELECT 1 FROM tb WHERE [Code]=RIGHT(1000+a.[Code]+1,3)) 
    ORDER BY RIGHT(1000+code+1,3)
END 

結果が 011 の下でこのストアド プロシージャを呼び出すと、それは正しいです。

DECLARE @code VARCHAR(3)

EXEC pp '009', @code OUTPUT

SELECT @code 

以下のストアドプロシージャを呼び出すと、結果は011のままなので、結果は間違っています。「004」である必要があります。

DECLARE @code VARCHAR(3)

EXEC pp '003', @code OUTPUT

SELECT @code 

これを修正する方法は?TKS!

4

2 に答える 2

1

おそらく、上位 1 を選択し、数値ではなく varchar であるフィールドで並べ替えているという事実に関係している可能性があります。[Code] フィールドを int にキャスト/変換してから、その値で並べ替えてみましたか?

于 2012-09-11T13:39:15.300 に答える
0

sproc を見ると、@code パラメータの値を 1 増やすだけでよいように見えます。そのため、sproc でこの計算をすべて行っているのはなぜですか。

値を増やしたいだけなら、もっと簡単な方法があります。

于 2012-09-11T13:41:51.320 に答える