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 的字段进行排序的事实有关,当您期望 order by 表现得像一个数字时。您是否尝试过将 [Code] 字段转换/转换为 int,然后按该值排序?

于 2012-09-11T13:39:15.300 回答
0

通过查看您的 sproc,您似乎只需将 @code 参数值增加 1。为此,您为什么要在 sproc 中进行所有这些计算。就像您从 tb 中选择并检查它是否有 > somevalue 和所有内容一样。

如果你只想增加价值,有很多更好更简单的方法。

于 2012-09-11T13:41:51.320 回答