Ваш запрос отлично работает для меня. Я попытался запустить его с помощью 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 [email protected]:[email protected]+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 [email protected]:[email protected]+1 ORDER BY SortId;
END //
DELIMITER ;
И выполнить его, используйте:
CALL updateSortIds();
Хранимые Procs в MySQL являются боль для управления и развертывания. Они требуют предоставления доступа учетным записям пользователей к таблице mysql.proc, а резервное копирование и восстановление БД не включает в себя SP. Поддержка SP в MySQL действительно оставляет желать лучшего. –
Похоже, вы хотите заказать таблицу из 0 - N. Есть ли причина, по которой вы не можете использовать столбец идентификатора, чтобы данные увеличивались при вставке? Или это существующие данные, которые вы не можете перезагрузить? Я попробовал это в SQL Server: обновления TBL набор sortId = 0 обновления TBL набор sortId = (SELECT COUNT (*) от ТПСА где sortId = 0) Я надеялся, что выбор будет выполняться для каждой строки и опускаюсь значения из N - 0, но он был выполнен только один раз. –
К сожалению, Джошуа прав, мне нужно использовать SP для этого. –