2010-03-31 13 views

risposta

2

Penso che sia necessaria una procedura memorizzata per qualsiasi tipo di stato. C'è una ragione per cui sei stato riluttante a crearne uno?

Come si esegue questo codice? È in un editor come SQL Server Manager o come una stringa in un programma?

+2

stored procedure in MySQL sono un dolore da gestire e da implementare. Richiedono l'accesso agli account utente alla tabella mysql.proc e il backup e il ripristino di un DB non includono gli SP. Il supporto SP in MySQL lascia davvero molto a desiderare. –

+0

Sembra che si desideri ordinare la tabella da 0 a N. C'è un motivo per cui non è possibile utilizzare una colonna Identity in modo che i dati vengano incrementati quando inseriti? Oppure questi dati esistenti non possono essere ricaricati? Ho provato questo in SQL Server: aggiornamento tbl impostare SortID = 0 aggiornamento tbl impostare SortID = (select count (*) da tbl dove SortID = 0) Speravo select verrebbe eseguito per ogni riga e scendono i valori da N - 0 ma sono stati eseguiti solo una volta. –

+0

Sfortunatamente Joshua è corretto, ho bisogno di usare un SP per questo. –

5

è stato inserito l'assegnazione variabile in un posto sbagliato:

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

Vostri criteri funziona bene per me. Ho provato a farlo funzionare da 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; 

Risultato:

Id sortId 
1 1 
2 3 
3 2 

Si noti che durante l'esecuzione di query di MySQL Query Browser dovrebbe entrare una query per riga, non due su una linea, come si sta facendo . Se si vuole mettere questo in una stored procedure (probabilmente una buona idea) è possibile creare in questo modo:

DELIMITER // 

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

DELIMITER ; 

E per eseguirlo, utilizzare questo:

CALL updateSortIds();