我有这个表和存储过程功能:
表:
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...
谢谢,
巫毒
答案 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