MAN CHUN LIEW Ответов: 2

Проблема переиндексации в SQL-операторе


Я хочу переиндексировать номер после того, как некоторые данные будут удалены. Я видел некоторые примеры из интернета, но не уверен, почему он всегда показывает сообщение об ошибке.
Before-------------------------
ID | Value
1  | One
2  | Two
6  | Three
8  | Four
9  | Five

After-------------------------
ID | Value
1  | One
2  | Two
3  | Three
4  | Four
5  | Five


Что я уже пробовал:

DECLARE @newid int
SET @newid=0;
UPDATE [dbo].[logs] SET LogId=(@newid:=@newid+1) ORDER BY LogId;

и он показывает сообщение об ошибке inccorect index рядом с '@newid:'

Patrice T

В чем выгода от переиндексации ?

2 Ответов

Рейтинг:
2

OriginalGriff

Это зависит от того, как организована ваша БД: если ID-это значение идентификатора (а оно должно быть), то вы его не меняете и не можете изменить, если только не скажете ему конкретно, что хотите: tsql - Как обновить столбец идентификаторов в SQL Server? - переполнение стека[^]

Но это опасно: идентификаторы должны однозначно идентифицировать строку, чтобы другие таблицы могли пересекаться с ней, и если вы начнете изменять значения идентификаторов, то рискуете испортить свою БД без надежды на восстановление.
Вместо этого, создайте новый столбец функция rownumber, и обновление, что в функции row_number: ROW_NUMBER (Transact-SQL) - SQL Server | Microsoft Docs[^]


Рейтинг:
1

RickZeeland

Я думаю := не разрешено, попробуйте использовать оператор=.