Basic-syntax FÜR die UPDATE-cursor
Ok, ich bin sicherlich vertraut mit gehen durch eine Tabelle mit nur-lese-cursor, aber ich kann nicht scheinen, um herauszufinden, die richtige syntax für tatsächlich Aktualisierung der aktuellen Zeile (Weder die cursor Seite noch die UPDATE-Seite in der Onlinedokumentation scheint zu zeigen, dieser einfache Vorgang):
DECLARE @counter int;
SET @counter = 1;
DECLARE myCursor CURSOR FOR
SELECT RowID, Value FROM myTable
FOR UPDATE OF Value;
OPEN myCursor;
WHILE @counter < 100
FETCH NEXT FROM myCursor
UPDATE myCursor SET Value = @Counter << DOESN'T WORK
SET @counter = @counter + 1
END
CLOSE myCursor
DEALLOCATE myCursor
Ich habe auch versucht nur SET Value = @Counter
und mit einem INTO @Value
auf der FETCH, aber konnte nicht scheinen, um die Arbeit entweder.
Dies ist natürlich stark vereinfacht, es gibt viel effizientere Wege, nur mit "count" in eine Spalte. Ich will Sie nicht langweilen mit der eigentlichen Berechnung.
Ja, ich brauche einen cursor und nicht ein UPDATE auf die komplette Tabelle (der Wert für jede aufeinander folgende Zeile wird basierend auf einer Berechnung, hängt von der vorherigen Zeile schon geschrieben).
Testen Sie diese zunächst auf SQL 2005, aber ich muss einen port, den code zu SQL 2000 und 2008. Danke!
InformationsquelleAutor BradC | 2010-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie verwenden möchten
WHERE CURRENT OF
-Ist aus MSDN.
FETCH NEXT FROM myCursor INTO @RowID
gefolgt vonUPDATE myTable SET Value = 2 WHERE RowID = @RowID
?Ich bin froh zu sagen, dass ich das verwenden von Cursorn, wenig genug, um nicht zu wissen! 🙂 Ich denke, es ist ein Fall der test mit ein paar Zeilen und sehen Sie, wie der plan aussieht. Ich kann mir nicht wirklich vorstellen, dass es viel anders, um ehrlich zu sein - vor allem, wenn @RowID ist der Schlüssel des gruppierten index.
Einige Aktualisierungen der zugrunde liegenden Tabelle in der sich der cursor nicht gesehen werden, es sei denn, Sie verwenden die "Where Current Of" - syntax finden Sie unter Declare Cursor-Docs in der MSDN. Suche die Seite für "Where current of", und sehen Sie die details. Es ist nicht ein häufiges Problem.
InformationsquelleAutor Matt Whitfield