Jika Anda secara khusus perlu mengubah nilai kunci utama ke nomor yang berbeda (mis. 123 -> 1123). Properti identitas memblokir mengubah nilai PK. Setel Identity_insert tidak akan berfungsi. Melakukan Sisipan / Hapus tidak disarankan jika Anda memiliki penghapusan cascading (kecuali jika Anda mematikan pemeriksaan integritas referensial).
Script ini akan mematikan identitas pada PK:
***********************
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
***********************
Selanjutnya, Anda dapat mengatur hubungan sehingga mereka akan memperbarui referensi kunci asing. Atau Anda harus mematikan penegakan hubungan. Tautan SO ini menunjukkan caranya:
Bagaimana batasan kunci asing sementara dapat dinonaktifkan menggunakan T-SQL?
Sekarang, Anda dapat melakukan pembaruan. Saya menulis sebuah skrip pendek untuk menulis semua pembaruan SQL saya berdasarkan nama kolom yang sama (dalam kasus saya, saya perlu meningkatkan CaseID dengan 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
Terakhir, aktifkan kembali integritas referensial dan aktifkan kembali kolom Identity pada kunci utama.
Catatan: Saya melihat beberapa orang menanyakan pertanyaan ini MENGAPA. Dalam kasus saya, saya harus menggabungkan data dari instance produksi kedua menjadi master DB sehingga saya bisa mematikan instance kedua. Saya hanya perlu semua data operasi PK / FK untuk tidak bertabrakan. Meta-data FK identik.