SQL查询和存储过程不会产生所需的结果

时间:2010-06-30 22:27:19

标签: sql database stored-procedures sybase

我有这个表和存储过程功能:

表:

CREATE TABLE _DMigNumbers(
    Number numeric(20,0) NOT NULL PRIMARY KEY
);
INSERT INTO _DMigNumbers VALUES(0)

存储过程功能:

CREATE FUNCTION read_and_increment()
RETURNS NUMERIC(20,0)
BEGIN
    DECLARE @number_just_read NUMERIC(20,0);

      SELECT number INTO @number_just_read
        FROM _DMigNumbers;

      UPDATE _DMigNumbers
         SET number = number + 1;
   RETURN @number_just_read;
End

我也创建了这个Numbers表

CREATE TABLE _Numbers (
    Number int NOT NULL PRIMARY KEY
);
INSERT INTO _Numbers VALUES(1)
INSERT INTO _Numbers VALUES(2)
INSERT INTO _Numbers VALUES(3)
INSERT INTO _Numbers VALUES(4)

现在:

当我这样做时:

select 
    f.Number
    ,read_and_increment()
from _Numbers f

我明白了:

  Number-----Value

   1          0   
   2          0   
   3          0   
   4          0   

我想要不同的值,如(0,1,2,3) - 我需要做些什么来实现这个目标?

据我所知,由于单一选择,我得到了相同的值,但不知道我需要做些什么才能得到我现在所追求的......

我无法使用IDENTITY或自动增量,请参阅my previous question for more details if interested...

谢谢,

巫毒

1 个答案:

答案 0 :(得分:2)

尝试将您的功能标记为NOT DETERMINISTIC并查看是否有帮助。默认情况下,所有函数都是确定性的,这意味着数据库服务器可以在某些情况下缓存结果。以这种方式标记将强制服务器每次重新评估查询/功能。

CREATE FUNCTION read_and_increment()
RETURNS NUMERIC(20,0)
NOT DETERMINISTIC
BEGIN
    DECLARE @number_just_read NUMERIC(20,0);

      SELECT number INTO @number_just_read
        FROM _DMigNumbers;

      UPDATE _DMigNumbers
         SET number = number + 1;
   RETURN @number_just_read;
End