Изменить таблицу, чтобы постепенно добавлять записи первичного ключа, где значения идентификаторов равны нулю - PullRequest
0 голосов
/ 16 мая 2019

У меня есть таблица на сервере sql с полем ID в качестве первичного ключа. В строках поля ID некоторые имеют значения первичного ключа, а некоторые строки не имеют значений первичного ключа, поскольку столбец ID допускает нулевое значение. Теперь я хочу выполнить запрос, чтобы постепенно добавлять значения в пустые строки, чтобы они могли иметь значения первичного ключа. Я попытался с помощью команды ALTER, но без заголовка

Ответы [ 2 ]

1 голос
/ 16 мая 2019

, поскольку вы не предоставили никакого описания структуры таблицы, и мы не знаем, существует ли какой-либо бизнес-ключ или существуют какие-то уникальные комбинации данных для идентификации строки без первичного ключа, тогда самый простой способ, imho, это использовать update курсор:

begin tran
-- rollback
-- commit

select * from [Table_1] where id is null

declare @Id int, @i int = 0
    ,@MaxId int

set @MaxId = (select Max(Id) from [Table_1] )
declare Update_cur cursor local
    for select Id from [Table_1] where id is null
    for update of Id

open Update_cur
fetch next from Update_cur into @Id
while @@FETCH_STATUS = 0 begin
    set @i += 1
    update [Table_1] set Id = @MaxId + @i  where CURRENT OF Update_cur
    fetch next from Update_cur into @Id
end

close Update_cur
deallocate Update_cur

select * from [Table_1] order by Id

P.S. не забудьте зафиксировать или откатить транзакцию после выполнения тестов

0 голосов
/ 16 мая 2019

Вы можете УДАЛИТЬ этот столбец и снова ДОБАВИТЬ со значением автоинкремента.

ALTER TABLE your_table DROP COLUMN ID
ALTER TABLE your_table ADD ID INT IDENTITY(1,1)

Это сгенерирует все значения с самого начала, и в результате вы потеряете существующее значение (до 6).

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