Добавляя значение плюс 1 каждый раз как обновление
В Advantage пытается обновить значение во временной таблице, но добавляет 1 каждый раз. Начальное значение должно быть на одно больше максимального значения из другой таблицы, и каждый раз, когда обновляется новая строка, к ней добавляется одна. Игнорировать все, кроме объявления курсора и строк @nevid вверху. Я могу получить его для заполнения столбца evid в моей временной таблице, но он добавляет 71 к каждой записи, что является правильным следующим числом, но мне нужно, чтобы оно было 71,72,73 и т. Д. Куда я иду не так?
DECLARE cur CURSOR;
DECLARE @nevid INTEGER;
DECLARE @startdate string;
DECLARE @starttime string;
DECLARE @expectedenddate string;
DECLARE @expectedendtime string;
DECLARE @enddate string;
DECLARE @endtime string;
@nevid =
(
SELECT (max(evid)+1)
FROM pcplevnt
);
SELECT *
INTO #tmpev
FROM <table>;open cur
AS
SELECT *
FROM #tmpev;
WHILE
FETCH cur do
UPDATE #tmpev
SET evid = cast(@nevid AS sql_char(4));SET @nevid = @nevid + 1;
END WHILE;
close cur;
1 ответ
Я собрал MVCE, чтобы воспроизвести и исправить вашу проблему:
DECLARE cur CURSOR;
DECLARE @nevid INTEGER;
TRY DROP TABLE #pcplevnt; CATCH ALL END TRY;
TRY DROP TABLE #tmpev; CATCH ALL END TRY;
CREATE TABLE
#pcplevnt
(
evid INTEGER
);
DELETE FROM #pcplevnt;
INSERT INTO #pcplevnt (evid) SELECT 111 FROM system.iota;
SET @nevid = (
SELECT
max(evid) + 1
FROM #pcplevnt
);
CREATE TABLE
#tmpev
(
id AUTOINC,
evid NVARCHAR(4)
);
INSERT INTO
#tmpev
(
evid
)
SELECT '1' FROM system.iota
UNION SELECT '2' FROM system.iota
UNION SELECT '3' FROM system.iota
;
OPEN cur AS SELECT * FROM #tmpev;
WHILE FETCH cur DO
UPDATE
#tmpev
SET
evid = CAST(@nevid AS SQL_CHAR(4))
WHERE
id = cur.id
;
SET @nevid = @nevid + 1;
END WHILE;
CLOSE cur;
select * from #tmpev;
Обратите внимание на WHERE
состояние в UPDATE
внутри цикла:
UPDATE
#tmpev
SET
evid = CAST(@nevid AS SQL_CHAR(4))
WHERE
id = cur.id
;
SET @nevid = @nevid + 1;
Я добавил поле первичного ключа id
что я могу сравнить с внутри цикла, чтобы обновить только одну строку временной таблицы за один раз.