Пример таблицы:
Sample
------
id (primary key)
secondaryId (optional secondary key)
crtdate (created date)
... (other fields)
- Некоторые пользователи используют
secondaryId
для идентификации строк (т. Е. должен быть уникальным) Когдастроки были созданы, secondaryId
не получил значение и по умолчанию было 0
.
Впоследствии строкам было присвоено значение secondaryId
по мере их использования.
- Мне нужно обновить все строки со значением
0
, чтобы оно стало следующим доступным числом.
Желаемый результат (с упрощенными значениями):
From: To:
id secondaryId id secondaryId
1 0 1 7 // this is the max(secondaryId)+1
2 0 2 8 // incrementing as we fill in the zeroes
3 5 3 5 // already assigned
4 0 4 9 // keep incrementing...
5 6 5 6 // already assigned
Этот запрос выполнит то, что я хочу сделать;но увы, CTE + UPDATE не поддерживается:
with temp(primary, rownumber) as (
values (
select
id,
row_number() over (partition by secondaryId order by crtdate)+6 --6 is max secondaryId
from Sample
where secondaryId='0'
)
update Sample set secondaryId=temp.rownumber where Sample.id=temp.id
У кого-нибудь есть предложения по другому способу решения этой проблемы?Теперь я страдаю от туннельного зрения ...