Su consulta funciona bien para mí. He intentado ejecutarlo desde 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;
Resultado:
Id sortId
1 1
2 3
3 2
Tenga en cuenta que cuando se ejecutan consultas de MySQL Query Browser debe introducir una consulta por línea, no dos en una sola línea como lo están haciendo . Si usted quiere poner esto en un procedimiento almacenado (probablemente una buena idea) puede crear de esta manera:
DELIMITER //
CREATE PROCEDURE updateSortIds()
BEGIN
SET @a:=0;
UPDATE tbl SET [email protected]:[email protected]+1 ORDER BY SortId;
END //
DELIMITER ;
Y para ejecutarlo, utilice esto:
CALL updateSortIds();
procedimientos almacenados en MySQL son una dolor para gestionar y desplegar. Requieren dar acceso a cuentas de usuario a la tabla mysql.proc, y la copia de seguridad y restauración de un DB no incluye los SP. El soporte de SP en MySQL realmente deja mucho que desear. –
Parece que desea pedir la tabla de 0 a N. ¿Hay alguna razón por la que no pueda usar una columna de identidad para que los datos se incrementen cuando se inserten? ¿O no se pueden volver a cargar los datos existentes? yo probamos este en SQL Server: actualización TBL establecer SortID = 0 actualización TBL establecer SortID = (select count (*) de TBL, donde SortID = 0) que estaba esperando el selecto ejecutaría para cada fila y descienden los valores de N - 0, pero solo se ejecutó una vez. –
Desafortunadamente Joshua tiene razón, necesito usar un SP para esto. –