переставить значение столбца идентичности на сервере SQL - PullRequest
1 голос
/ 27 апреля 2011

Пожалуйста, помогите мне! У меня в таблице будет поле идентичности, значение которого равно например, 1, 2, 4, 6, 8, 10, 11 .... и т. д.

Я хочу сделать это в последовательности, то есть 1,2,3,4,5,6,7 ... без использования drop

Спасибо

Ответы [ 5 ]

3 голосов
/ 27 апреля 2011

Вы не можете.identity столбцы не обновляются.(или, по крайней мере, вы не можете в любом случае. Вы можете удалить все строки из таблицы и затем вставить их с помощью IDENTITY_INSERT on)

Кроме того, пробелы в столбцах identity - это просто факт жизнилучше всего смириться с!Если вам нужна непрерывная последовательность чисел для отображения, вы можете использовать ROW_NUMBER.

1 голос
/ 07 августа 2014

Я думаю, что это лучшее решение ... попробуйте, если вам это нравится ...

DECLARE @INC AS INTEGER 
SET @INC = 1 
WHILE (@INC <= 7582) --7582 is rowcount of table
BEGIN
    UPDATE YourTable
    SET    ID = @INC
    WHERE  ID = (
               SELECT MIN(ID) AS T
               FROM   YourTable
               WHERE  ID > @INC
           ) --ID=> Identity column
    SET @INC = @INC + 1
END 

Примечание: перед выполнением необходимо удалить вставку идентификатора в столбец.

1 голос
/ 27 апреля 2011

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

CREATE VIEW MyTableView AS SELECT ROW_NUMBER() OVER (ORDER BY Identity) AS RowNum, * FROM MyTable

, и тогда ваши клиенты будут выбирать из MyTableView.

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

1 голос
/ 27 апреля 2011

Почему бы вам не создать новое поле, сделать его начальным числом, начинающимся с 1, а затем удалить старый столбец и переименовать новый столбец (а затем воссоздать все ссылки FK).

0 голосов
/ 19 июня 2013

DBCC CHECKIDENT (<'Имя таблицы'>, RESEED, <'последняя последовательность в таблице **'>)

** при вводе будет добавлено число плюс 1 (+1).т. е. для новой записи требовалось следующее 38, поэтому в качестве этого значения использовалось 37

...