Установите значения от 0 до n в SQL - PullRequest
1 голос
/ 21 марта 2012

Как установить все значения в столбце OrderNumber от 1 до n (когда они упорядочены по первичному ключу), где n - количество записей в таблице?

EDIT:

Давайте предположим, что у нас есть 3 записи с идентификаторами 4,7 и 15 ... Я хочу установить их значения OrderValues ​​1,2 и 3.
Я использую SQL Server 2008.

1 Ответ

9 голосов
/ 21 марта 2012
;WITH x AS (SELECT ID, OrderValues, 
    rn = ROW_NUMBER() OVER (ORDER BY ID)
   FROM dbo.tablename
)
UPDATE x SET OrderValues = rn;

Однако, с какой стати вы хотите это сделать, когда вы можете получить эту информацию, используя функцию ROW_NUMBER() во время запроса? Сохранение значений означает, что они гарантированно устаревают и не синхронизируются в тот момент, когда вы вставляете / обновляете / удаляете одну строку в таблице. Поэтому, если вы не планируете запускать это обновление после каждой операции DML (например, с использованием триггера), что для меня не очень логично, вам, вероятно, будет гораздо лучше получить эти значения row_number при запуске запроса, чем сохранять их в таблица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...