Если вам необходимо изменить значение первичного ключа на другое число (например, 123 -> 1123). Свойство identity блокирует изменение значения PK. Установить Identity_insert не будет работать. Делать вставку / удаление не рекомендуется, если у вас есть каскадное удаление (если вы не отключите проверку ссылочной целостности).
Этот скрипт отключит идентификацию на ПК:
***********************
sp_configure 'allow update', 1
go
reconfigure with override
go
update syscolumns set colstat = 0 --turn off bit 1 which indicates identity column
where id = object_id('table_name') and name = 'column_name'
go
exec sp_configure 'allow update', 0
go
reconfigure with override
go
***********************
Далее вы можете установить отношения, чтобы они обновляли ссылки на внешние ключи. Или же вам нужно отключить соблюдение отношений. Эта ссылка SO показывает, как:
Как можно временно отключить ограничения внешнего ключа с помощью T-SQL?
Теперь вы можете делать свои обновления. Я написал короткий скрипт для написания всех моих обновлений SQL на основе того же имени столбца (в моем случае мне нужно было увеличить CaseID на 1 000 000:
select
'update ['+c.table_name+'] SET ['+Column_Name+']=['+Column_Name+']+1000000'
from Information_Schema.Columns as c
JOIN Information_Schema.Tables as t ON t.table_Name=c.table_name and t.Table_Schema=c.table_schema and t.table_type='BASE TABLE'
where Column_Name like 'CaseID' order by Ordinal_position
Наконец, снова включите ссылочную целостность, а затем снова включите столбец Identity на первичном ключе.
Примечание: я вижу, что некоторые люди на эти вопросы спрашивают, ПОЧЕМУ. В моем случае мне нужно объединить данные из второго производственного экземпляра в основную БД, чтобы я мог закрыть второй экземпляр. Мне просто нужно, чтобы все PK / FKs данных операций не сталкивались. Метаданные ФК идентичны.