Якщо спеціально потрібно змінити значення первинного ключа на інше число (наприклад, 123 -> 1123). Блоки властивості ідентичності змінюють значення ПК. Встановити 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 в первинному ключі.
Примітка. Я бачу, що деякі люди на ці питання задають ЧОМУ. У моєму випадку я повинен об'єднати дані з другого виробничого екземпляра в основний БД, щоб я міг вимкнути другий екземпляр. Мені просто потрібні всі дані ПК / ФК операцій, щоб вони не стикалися. Метадані ФК однакові.