Birincil anahtar değerini özellikle farklı bir sayıya değiştirmeniz gerekiyorsa (ör. 123 -> 1123). İdentity özelliği bir PK değerini değiştirmeyi engeller. Set Identity_insert işe yaramayacak. Basamaklı silme işlemleriniz varsa (başvuru bütünlüğü denetimini kapatmadıysanız) Ekle / Sil işlemi önerilmez.
Bu komut dosyası bir PK üzerindeki kimliği kapatır:
***********************
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
***********************
Daha sonra ilişkileri, yabancı anahtar referanslarını güncelleyecek şekilde ayarlayabilirsiniz. Aksi takdirde ilişki yürütmeyi kapatmanız gerekir. Bu SO bağlantısı nasıl gösterir:
Yabancı anahtar kısıtlamaları T-SQL kullanarak geçici olarak nasıl devre dışı bırakılabilir?
Şimdi güncellemelerinizi yapabilirsiniz. Tüm güncelleme SQL'imi aynı sütun adına göre yazmak için kısa bir komut dosyası yazdım (benim durumumda, CaseID'yi 1.000.000 artırmam gerekiyordu:
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
Son olarak, başvuru bütünlüğünü yeniden etkinleştirin ve ardından birincil anahtardaki Kimlik sütununu yeniden etkinleştirin.
Not: Bu sorulardaki bazı kişilerin NEDEN diye sorduğunu görüyorum. Benim durumumda, ikinci bir üretim örneğindeki verileri bir ana DB'ye birleştirmem gerekiyor, böylece ikinci örneği kapatabiliyorum. Çarpışmamak için sadece operasyon verilerinin tüm PK / FK'larına ihtiyacım var. Meta veri FK'leri aynıdır.