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

У меня есть таблица с уникальным автоинкрементным первичным ключом. Некоторые записи были удалены из таблицы, поэтому в идентификаторах есть пробелы, это не последовательность.

Мне нужен запрос, который сделает последовательность. таблица не связана ни с какой другой таблицей, поэтому я могу временно удалить pk и автоинкремент из столбца id (пока идентификаторы не станут последовательностью).

  1. Я использую SQL-сервер
  2. Если возможно, я хочу запустить запрос, начиная с определенного идентификатора

1 Ответ

0 голосов
/ 13 января 2019

Вы не можете обновить значения столбца идентификаторов, а также не можете удалить идентификатор из столбца, обновить значения и установить его обратно. Необходимо создать новую таблицу с той же схемой, скопировать данные из старой таблицы, но для ID сгенерировать новое значение, отбросить старую таблицу и переименовать новую, чтобы сохранить то же имя.

use [tempdb]
go

if OBJECT_ID('TestTable') is not null
    drop table TestTable
go

create table TestTable (
    ID int not null primary key clustered identity(1,1)
    , Name varchar(50)
)

insert into TestTable(Name) values
    ('Row #1'),('Row #2'),('Row #3'),
    ('Row #4'),('Row #5'),('Row #6'),
    ('Row #7'),('Row #8'),('Row #9')

delete from TestTable where ID in (3, 4, 8) -- Make some gaps

create table TestTable_NEW (
    ID int not null primary key clustered identity(1,1)
    , Name varchar(50)
)

insert into TestTable_NEW(Name)
select Name
from TestTable
order by ID -- Preserve the rows order

drop table TestTable

exec sp_rename N'TestTable_NEW', N'TestTable'

Однако я не буду рекомендовать делать это вообще. Значения идентичности должны быть неизменными. Они не должны никогда меняться. Если у вас есть проблемы с пробелами, не допускайте удаления существующих записей. Кроме того, идентичность не гарантирует , что в последовательности не будет пробелов. Только что значения будут уникальными и растущими. Так что вам определенно следует пересмотреть свою базу данных и / или дизайн приложения, потому что он имеет недостатки.

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