2010-03-31 20 views

Odpowiedz

2

Myślę, że potrzebujesz procedury przechowywanej dla dowolnego stanu statefullness. Czy istnieje powód, dla którego nie chciałeś go stworzyć?

Również, w jaki sposób uruchamiasz ten kod? Czy jest w edytorze takim jak SQL Server Manager lub jako ciąg w programie?

+2

Przechowywane Procs w MySQL są ból do zarządzania i wdrażania. Wymagają one przyznania kontom użytkowników dostępu do tabeli mysql.proc, a tworzenie kopii zapasowych i przywracanie bazy danych nie obejmuje SP. Wsparcie SP w MySQL naprawdę pozostawia wiele do życzenia. –

+0

Wygląda na to, że chcesz zamówić tabelę od 0 do N. Czy istnieje powód, dla którego nie możesz użyć kolumny tożsamości, aby dane zostały zwiększone po wstawieniu? Czy te istniejące dane nie mogą zostać ponownie załadowane? Próbowałem to w SQL Server: aktualizacja tbl ustawić sortId = 0 aktualizacja tbl ustawiony sortId = (select count (*) od tbl gdzie sortId = 0) Miałem nadzieję select by wykonać dla każdego wiersza i schodzić wartości od N - 0, ale zostało wykonane tylko raz. –

+0

Niestety Joshua ma rację, potrzebuję użyć SP dla tego. –

2

Zapytanie działa dobrze dla mnie. Próbowałem uruchomić go z 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; 

Wynik:

Id sortId 
1 1 
2 3 
3 2 

pamiętać, że podczas uruchamiania kwerendy z MySQL Query Browser należy wprowadzić jedną kwerendę na linię, a nie dwa na jednej linii, jak robisz . Jeśli chcesz umieścić to w procedurze przechowywanej (dobrym pomysłem) można utworzyć ją tak:

DELIMITER // 

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

DELIMITER ; 

A, aby go wykonać, użyj tego:

CALL updateSortIds(); 
Powiązane problemy