У меня есть набор записей, который выглядит следующим образом:
| key_sk | unique_id |
|--------|--------------------------------------|
| 2 | null |
| 2 | null |
| 3 | 83a1c90b-e58d-4db4-b438-a79edfb28e60 |
| 3 | 83a1c90b-e58d-4db4-b438-a79edfb28e60 |
| 4 | 4ce66783-0b84-4e8a-a0de-c3284e4d9cd0 |
| 5 | null |
Я хотел бы создать уникальный идентификатор для каждого уникального набора key_sk
, где unique_id
имеет значение null. Для приведенного выше я хотел бы, чтобы key_sk 2
имел один unique_id
, как key_sk 3
.
Моя попытка ниже генерировала разные uniqueidentifier
для каждого набора. Я думаю, это из-за рекурсивной природы общих табличных выражений: каждое присоединение к CTE вызывает вызов NEWID()
.
;with update_id_cte as
(
select distinct hr.key_sk
,NEWID() as gened_unique_id
from history_record hr
where hr.unique_id is null
)
update hr
set hr.unique_id = cte.gened_unique_id
from history_record hr
join update_id_cte cte
on hr.key_sk = cte.key_sk
Вероятно, для этого есть более простой способ, чем использование CTE. Как я могу сгенерировать и обновить таблицу history_record
одним uniqueidentifier
для каждого отдельного key_sk
?