Заполнение столбца ID таблицы, НЕ используя курсор - PullRequest
0 голосов
/ 13 декабря 2018

Таблицы были созданы и использованы без столбца и идентификатора, но теперь необходим столбец идентификатора.(классика)

Я слышал, что все можно сделать без курсоров.Мне просто нужно, чтобы каждая строка содержала различное значение int, поэтому я искал какую-то функцию номера строки:

Как мне использовать ROW_NUMBER ()?

Я не могу точно сказать, как использовать его даже с этими примерами.

UPDATE [TableA]
SET [id] = (select ROW_NUMBER() over (order by id) from [TableA])

Подзапрос вернул более 1 значения.

Так что ... даКонечно, он возвращает более одного значения.Тогда как смешать и номер обновления, и номер строки, чтобы заполнить этот столбец?

PS.Мне не нужен точный порядок, просто уникальные значения.Мне также интересно, подходит ли ROW_NUMBER () в этой ситуации ...

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы также можете использовать подзапрос как

Declare @TableA table (ID int,SomeCol varchar(50))
Insert Into @TableA values
 (null,'Dog')
,(null,'Cat')
,(null,'Monkey');

UPDATE T1
SET T1.ID = T2.RN
FROM @TableA T1 JOIN
     (
       SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) RN,
              *
       FROM @TableA
     ) T2
ON T1.SomeCol = T2.SomeCol;


Select * from @TableA
0 голосов
/ 13 декабря 2018

Вы можете использовать CTE для обновления

Пример

Declare @TableA table (ID int,SomeCol varchar(50))
Insert Into @TableA values
 (null,'Dog')
,(null,'Cat')
,(null,'Monkey')

;with cte as ( 
      Select *
            ,RN = Row_Number() over(Order by (Select null))
      From  @TableA
)
Update cte set ID=RN

Select * from @TableA

Обновленная таблица

ID  SomeCol
1   Dog
2   Cat
3   Monkey
...