2016-03-22 19 views
1

Ich wollte die Spaltenwerte bei erfüllender Bedingung aktualisieren. Ich wollte die Werte 1,2,3,4,5,...Aktualisierung der Spaltenwerte unter Bedingung

Ich versuchte diese Abfrage, aber es verhält sich auf eine seltsame Art und Weise. Ich bin die Werte immer ausgehend von 2 d.h 2,3,4,5,..

declare @id int; 

set @id = 0; 

UPDATE table 
SET id = @id + 1, @id = @id + 1 
WHERE col4 = 100 
    AND col5 = 500 
    AND col3 = 2 
+1

Bitte geben Sie Tabellendefinitionen, Beispieldaten und erwartete Ausgabe: http://stackoverflow.com/help/how-to -Fragen. Wenn Sie eine Fehlermeldung oder ein Verhalten erhalten, das Sie nicht erwarten, geben Sie bitte auch Details dazu an. –

+0

suchen Sie nach ROWNUMBER() oder einer Zahlentabelle –

+0

Ihre Abfrage sieht aus wie eine MySQL-Abfrage, keine SQL Server-Abfrage. –

Antwort

4

Es scheint, wie Sie Datensätze aufzuzählen wollen, die die Kriterien in der WHERE Klausel erfüllen. Ich würde vorschlagen, ein CTE mit ROW_NUMBER mit:

;WITH ToUpdate AS (
    SELECT id, 
     ROW_NUMBER() OVER (ORDER BY col3) AS rn 
    FROM mytable 
    WHERE col4=100 AND col5=500 AND col3=2 
) 
UPDATE ToUpdate 
SET id = rn 
+0

Kann ich wissen, was mit meiner Anfrage nicht stimmt? –

+0

@ J19 Das Problem mit Ihrer Anfrage ist, dass '@ id' * zuerst * gesetzt und * dann * gelesen wird. –

0

Versuchen Sie, diese -

Declare @id int; 
Set @id=1; 

UPDATE table 
SET @id = id = @id + 1 
WHERE 
(col4=100 AND col5=500 AND col3=2) 
Verwandte Themen