Nếu bạn đặc biệt cần thay đổi giá trị khóa chính thành một số khác (ví dụ 123 -> 1123). Các khối thuộc tính nhận dạng thay đổi một giá trị PK. Đặt Identity_insert sẽ không hoạt động. Không nên thực hiện Chèn / Xóa nếu bạn xóa tầng (trừ khi bạn tắt kiểm tra tính toàn vẹn tham chiếu).
Kịch bản này sẽ tắt danh tính trên 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
***********************
Tiếp theo, bạn có thể đặt các mối quan hệ để họ sẽ cập nhật các tham chiếu khóa ngoài. Hoặc nếu không bạn cần phải tắt thực thi mối quan hệ. Liên kết SO này cho thấy làm thế nào:
Làm thế nào các ràng buộc khóa ngoại có thể tạm thời bị vô hiệu hóa bằng T-SQL?
Bây giờ, bạn có thể làm cập nhật của bạn. Tôi đã viết một đoạn mã ngắn để viết tất cả SQL cập nhật của mình dựa trên cùng một tên cột (trong trường hợp của tôi, tôi cần tăng CaseID thêm 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
Cuối cùng, kích hoạt lại tính toàn vẹn tham chiếu và sau đó kích hoạt lại cột Danh tính trên khóa chính.
Lưu ý: Tôi thấy một số người trong những câu hỏi này hỏi TẠI SAO. Trong trường hợp của tôi, tôi phải hợp nhất dữ liệu từ một phiên bản sản xuất thứ hai vào một DB chính để tôi có thể tắt phiên bản thứ hai. Tôi chỉ cần tất cả các PK / FK của dữ liệu hoạt động để không va chạm. FK siêu dữ liệu là giống hệt nhau.