Используя переменные MySQL в запросе

Я пытаюсь использовать этот запрос MySQL:

SET @a:=0; UPDATE tbl SET sortId=@a:=@a+1 ORDER BY sortId;

К сожалению, я получаю эту ошибку:
"Параметр '@a' должен быть определен"

Действительно ли это возможно к пакетным командам в 1 запрос как это, или я должен создать хранимую процедуру для этого?

6
задан Jon Tackabury 31 March 2010 в 20:55
поделиться

3 ответа

Я думаю, что вам нужна хранимая процедура для любого типа statefullness. Есть ли причина, по которой вы не хотели ее создавать?

Кроме того, как вы выполняете этот код? В редакторе типа SQL Server Manager или как строку в программе?

2
ответ дан 10 December 2019 в 02:45
поделиться

Ваш запрос мне подходит. Я попытался запустить его из MySQL Query Browser:

CREATE TABLE tbl (Id INT NOT NULL, SortId INT NOT NULL);
INSERT INTO tbl (Id, SortId) VALUES (1, 9), (2, 22), (3, 13);

SET @a:=0;
UPDATE tbl SET sortId=@a:=@a+1 ORDER BY sortId;

SELECT * From tbl;

Результат:

Id  sortId
1   1
2   3
3   2

Обратите внимание, что при выполнении запросов из MySQL Query Browser следует вводить один запрос в строке, а не два в одной строке, как вы это делаете. Если вы хотите поместить это в хранимую процедуру (вероятно, хорошая идея), вы можете создать ее следующим образом:

DELIMITER //

CREATE PROCEDURE updateSortIds()
BEGIN
   SET @a:=0;
   UPDATE tbl SET SortId=@a:=@a+1 ORDER BY SortId;
END //

DELIMITER ;

И для ее выполнения используйте это:

CALL updateSortIds();
2
ответ дан 10 December 2019 в 02:45
поделиться

Вы неправильно разместили присвоение переменной:

SET @a:=0; UPDATE tbl SET @a:=sortId=@a+1 ORDER BY sortId;
5
ответ дан 10 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: