2010-03-31 20 views

Respuesta

2

Creo que necesita un procedimiento almacenado para cualquier tipo de statefullness. ¿Hay alguna razón por la que te has resistido a crear uno?

¿Cómo está ejecutando este código? ¿Está en un editor como el Administrador de SQL Server o como una cadena en un programa?

+2

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. –

+0

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. –

+0

Desafortunadamente Joshua tiene razón, necesito usar un SP para esto. –

5

que haya realizado la asignación variable en un lugar equivocado:

SET @a:=0; UPDATE tbl SET @a:[email protected]+1 ORDER BY sortId; 
2

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(); 
Cuestiones relacionadas