Sql - Gespeicherte Prozedur mit der While-Anweisung
ich versuche zu aktualisieren, einige Spalten, die Werte mithilfe einer gespeicherten Prozedur:
CREATE PROCEDURE [dbo].[UpdataObjectivesPosition]
@idGoal int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @count int
SET @count = 1
WHILE exists (SELECT * From Objective Where IDgoal = @idGoal)
Begin
Update [Tasks] Set Position=@count
SET @count = @count + 1
End
END
GO
Aber ich bekomme eine endlos-Schleife, ich denke, es ist, weil der while-Ausdruck.
Also, wie kann ich erstellen Sie diese Prozedur, richtig ? Bitte helfen Sie mir
Beispiel:
Name Position
tskA - 4
tskB - 5
tskc - 7
Ich will, dass das Verfahren setzt die position an 1 , 2 , 3 , .......
Warum sollte die Bedingung in der
Ich weiß nicht, aber während der nie endet
Natürlich ist es nie endet Ihr while-Bedingung hat immer das gleiche Ergebnis. Zum Ende der Schleife hat es
Ja, mir ist klar, dass. Aber meine Frage ist warum kann ich in der while-Anweisung nur die benötigten Zeilen und aktualisieren Sie den Wert im inneren, Während.
Ok, deine Logik jetzt liest wie diese: "Wenn der Wert von @idGoal in der Tabelle existiert, dann weiter in dieser Schleife". Nun ist die einzige Möglichkeit, diese Schleife zu stoppen ist, wenn dieser Wert hält die bestehenden in die Ziel-Tabelle. Dies ist, warum Sie laufen in einer Endlosschleife.
while
ändern?Ich weiß nicht, aber während der nie endet
Natürlich ist es nie endet Ihr while-Bedingung hat immer das gleiche Ergebnis. Zum Ende der Schleife hat es
false
. Aber die Auswahl in der immer etwas zurückgibt, weil es ist immer das gleiche wählen.Ja, mir ist klar, dass. Aber meine Frage ist warum kann ich in der while-Anweisung nur die benötigten Zeilen und aktualisieren Sie den Wert im inneren, Während.
Ok, deine Logik jetzt liest wie diese: "Wenn der Wert von @idGoal in der Tabelle existiert, dann weiter in dieser Schleife". Nun ist die einzige Möglichkeit, diese Schleife zu stoppen ist, wenn dieser Wert hält die bestehenden in die Ziel-Tabelle. Dies ist, warum Sie laufen in einer Endlosschleife.
InformationsquelleAutor mmarques | 2013-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht eine Schleife um alle zu erreichen, was Sie wollen, Sie können dies tun, mit der ROW_NUMBER() Funktion:
Beispiel auf SQL Fiddle
InformationsquelleAutor GarethD
Hier ist eine SQL-Server Lösung, die ich vor kurzem entdeckt.
Es nutzt die doppelte Zuordnung (
SET @a = @b = @a + 1
).SQLFiddle
Für mehr Informationen
InformationsquelleAutor bobs