У меня есть эта таблица и хранимая функция ргоса:SQL запрос и хранимая процедура не производят желаемые результаты
Таблица:
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
и создать это номер таблица
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) - то, что мне нужно сделать для достижения этой цели?
Я понимаю, что я получаю то же значение, из-за одного Select, но не уверен, что мне нужно сделать, чтобы получить то, что я после того, как на данный момент ......
Я не могу использовать IDENTITY или автоинкремент см my previous question for more details if interested...
Спасибо,
Voodoo
Это похоже на программирование вуду. afaik, это первый раз, когда я видел такой запрос (обновление при выполнении select) здесь в SO – Hao
На основании принятого ответа от другого сообщения, похоже, что вам не хватает инструкции commit. Это происходит автоматически в Sybase? –
У меня нет доступа к Sybase, поэтому я не могу запустить этот код. Однако в SQL Server вы не можете сделать такую функцию, вы получите ошибку: «Недопустимое использование побочного эффекта или зависящего от времени оператора в« UPDATE »внутри функции.« Я не уверен, d сделать это в Sybase. –