Вы не можете обновить личность столбца.
SQL Server не позволяет обновлять столбец идентификаторов в отличие от того, что вы можете сделать с другими столбцами с помощью оператора update.
Хотя есть несколько альтернатив для достижения подобного рода требований.
- Когда значение столбца Identity необходимо обновить для новых записей
Используйте DBCC CHECKIDENT, который проверяет текущее значение идентификатора для таблицы и, если необходимо, изменяет значение идентификатора.
DBCC CHECKIDENT('tableName', RESEED, NEW_RESEED_VALUE)
- Когда значение столбца Identity необходимо обновить для существующих записей
Используйте IDENTITY_INSERT, который позволяет вставлять явные значения в столбец идентификаторов таблицы.
SET IDENTITY_INSERT YourTable {ON|OFF}
Пример:
-- Set Identity insert on so that value can be inserted into this column
SET IDENTITY_INSERT YourTable ON
GO
-- Insert the record which you want to update with new value in the identity column
INSERT INTO YourTable(IdentityCol, otherCol) VALUES(13,'myValue')
GO
-- Delete the old row of which you have inserted a copy (above) (make sure about FK's)
DELETE FROM YourTable WHERE ID=3
GO
--Now set the idenetity_insert OFF to back to the previous track
SET IDENTITY_INSERT YourTable OFF
UPDATE YourTable SET IdentityCol = 13
).SET IDENTITY_INSERT YourTable ON
разрешены только ВСТАВКИ, но не ОБНОВЛЕНИЯ.Если ваш вопрос правильно, вы хотите сделать что-то вроде
Позвольте мне сказать вам, что это не простой процесс, и его не рекомендуется использовать, так как могут быть некоторые
foreign key
связанные с ним.Но вот шаги, чтобы сделать это, пожалуйста, возьмите
back-up
за столШаг 1 - Выберите вид дизайна таблицы
Шаг 2 - Выключите столбец идентификации
Теперь вы можете использовать
update
запрос.Теперь
redo
шаг 1 и шаг 2 и включите столбец идентификацииСсылка
источник
:)
Тебе надо
Затем удалите строку и вставьте ее с другим именем.
После того, как вы сделали вставку, не забудьте выключить identity_insert
источник
источник
Попробуйте использовать
DBCC CHECKIDENT
:источник
скопируйте вашу таблицу в новую таблицу без идентификатора столбца.
добавить столбец идентификаторов в newtable с новым семенем и сделать его первичным ключом
источник
table_name = дать таблицу, которую вы хотите сбросить значение
значение = начальное значение, равное нулю, для начала столбца идентификаторов с 1
источник
При использовании Identity_Insert не забудьте включить имена столбцов, потому что sql не позволит вам вставить без указания их
источник
Вы также можете использовать,
SET IDENTITY INSERT
чтобы позволить вам вставлять значения в столбец идентификаторов.Пример:
И тогда вы можете вставить в столбец идентичности нужные вам значения.
источник
Однако приведенный выше код работает, только если нет отношения первичного-внешнего ключа
источник
Комплексное решение для программистов на C # с использованием компоновщика команд
Прежде всего, вы должны знать следующие факты:
Итак, однажды узнав об этом, вы должны это сделать. Либо запрограммируйте свой собственный оператор вставки SQL, либо запрограммируйте собственный построитель команд вставки. Или используйте тот, который я запрограммировал для вас. При наличии DataTable генерирует скрипт SQL Insert:
источник
Я решил эту проблему сначала с помощью DBCC, а затем с помощью вставки. Например, если ваша таблица
Сначала установите новое текущее значение ID в таблице как NEW_RESEED_VALUE
MyTable {IDCol, colA, colB}
тогда вы можете использовать
Это будет дублировать все ваши записи, но с использованием нового значения IDCol, начиная с NEW_RESEED_VALUE. Затем вы можете удалить дубликаты строк с более высоким значением ID, как только вы удалили / переместили ссылки на их внешние ключи, если таковые имеются.
источник
Вы можете создать новую таблицу, используя следующий код.
Затем удалите старую базу данных и переименуйте новую базу данных в имя старой базы данных. Обратите внимание : что column1 и column2 представляют все столбцы в вашей старой таблице, которые вы хотите сохранить в новой таблице.
источник
Если вам необходимо изменить значение первичного ключа на другое число (например, 123 -> 1123). Свойство identity блокирует изменение значения PK. Установить Identity_insert не будет работать. Делать вставку / удаление не рекомендуется, если у вас есть каскадное удаление (если вы не отключите проверку ссылочной целостности).
Этот скрипт отключит идентификацию на ПК:
Далее вы можете установить отношения, чтобы они обновляли ссылки на внешние ключи. Или же вам нужно отключить соблюдение отношений. Эта ссылка SO показывает, как: Как можно временно отключить ограничения внешнего ключа с помощью T-SQL?
Теперь вы можете делать свои обновления. Я написал короткий скрипт для написания всех моих обновлений SQL на основе того же имени столбца (в моем случае мне нужно было увеличить CaseID на 1 000 000:
Наконец, снова включите ссылочную целостность, а затем снова включите столбец Identity на первичном ключе.
Примечание: я вижу, что некоторые люди на эти вопросы спрашивают, ПОЧЕМУ. В моем случае мне нужно объединить данные из второго производственного экземпляра в основную БД, чтобы я мог закрыть второй экземпляр. Мне просто нужно, чтобы все PK / FKs данных операций не сталкивались. Метаданные ФК идентичны.
источник