2010-03-31 8 views

Antwort

2

Ich denke, dass Sie eine gespeicherte Prozedur für jede Art von Statusfullness benötigen. Gibt es einen Grund, warum Sie sich widersetzt haben, einen zu erstellen?

Auch wie läuft dieser Code? Ist es in einem Editor wie SQL Server Manager oder als Zeichenfolge in einem Programm?

+2

Stored Procs in MySQL ein Schmerz zu verwalten und zu implementieren. Sie müssen Benutzerkonten Zugriff auf die Tabelle mysql.proc gewähren, und das Sichern und Wiederherstellen einer Datenbank enthält keine SPs. Die SP-Unterstützung in MySQL lässt wirklich zu wünschen übrig. –

+0

Es sieht so aus, als ob Sie die Tabelle von 0 - N sortieren möchten. Gibt es einen Grund, warum Sie keine Identitätsspalte verwenden können, damit die Daten beim Einfügen inkrementiert werden? Oder können diese vorhandenen Daten nicht erneut geladen werden? Ich habe versucht, dies in SQL Server: Update Tabl SortID = 0 Update Tabl gesetzt SortID = gesetzt (select count (*) aus Tabl wo SortID = 0) ich die Auswahl der Hoffnung wurde für jede Zeile durchführen würde und absteigen die Werte von N - 0 aber es wurde nur einmal ausgeführt. –

+0

Leider hat Joshua Recht, ich brauche dafür einen SP. –

5

Sie platziert die variable Zuordnung in einem falschen Ort:

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

Ihre Anfrage für mich gut funktioniert. Ich habe versucht, es von MySQL Query Browser ausgeführt wird:

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; 

Ergebnis:

Id sortId 
1 1 
2 3 
3 2 

Beachten Sie, dass, wenn Anfragen von MySQL Query Browser läuft eine Abfrage pro Zeile eingeben sollte, nicht zwei auf einer Linie, wie Sie tun, . Wenn Sie dies in einer gespeicherten Prozedur setzen wollen (wahrscheinlich eine gute Idee) Sie es wie folgt zu erstellen:

DELIMITER // 

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

DELIMITER ; 

Und es auszuführen, verwenden Sie diese:

CALL updateSortIds(); 
Verwandte Themen