it-swarm.com.de

So fügen Sie eine Zeilennummernspalte in SQL Server 2012 hinzu

Ich versuche, einer vorhandenen Tabelle eine neue Spalte hinzuzufügen, wobei der Wert die Zeilennummer/der Rang ist. Ich brauche einen Weg, um den Zeilennummern-/Rangwert zu generieren, und ich muss auch die betroffenen Zeilen begrenzen - in diesem Fall das Vorhandensein eines Teilstrings innerhalb eines Strings.

Gerade habe ich:

UPDATE table
SET row_id=ROW_NUMBER() OVER (ORDER BY col1 desc) FROM table
WHERE CHARINDEX('2009',col2) > 0

Und ich bekomme diesen Fehler:

Windowed functions can only appear in the SELECT or ORDER BY clauses.

(Gleicher Fehler für RANK())

Gibt es eine Möglichkeit, eine Spalte mit der Funktion ROW_NUMBER () zu erstellen/zu aktualisieren? Zu Ihrer Information, dies soll eine falsche, bereits vorhandene "Rank" -Spalte ersetzen.

15
Michael Carper

Sie können dies mit einem CTE machen, etwa:

with cte as
(
  select *
    , new_row_id=ROW_NUMBER() OVER (ORDER BY col1 desc)
  from MyTable
  where charindex('2009',col2) > 0
)
update cte
set row_id = new_row_id

SQL Fiddle mit Demo .

24
Ian Preston

Wenn Sie nur ein paar tausend Zeilen aktualisieren, können Sie Folgendes versuchen:

select 'UPDATE MyTable SET ID = ' + CAST(RowID as varchar) + ' WHERE ID = ' + CAST(ID as varchar)
From (
select MyTable, ROW_NUMBER() OVER (ORDER BY SortColumn) RowID from RaceEntry 
where SomeClause and SomeOtherClause
) tbl

Kopieren Sie die Abfrageergebnisse, fügen Sie sie in den Abfrageeditor ein und führen Sie sie aus. Es ist ein bisschen träge und yukky, es funktioniert.

1
Sparhawk_