หากคุณต้องการเปลี่ยนค่าคีย์หลักเป็นหมายเลขอื่น (เช่น 123 -> 1123) บล็อกคุณสมบัติเอกลักษณ์เปลี่ยนค่า PK ตั้ง Identity_insert จะไม่ทำงาน การแทรก / ลบไม่แนะนำให้เลือกถ้าคุณมีการลบแบบเรียงซ้อน (ยกเว้นว่าคุณปิดการตรวจสอบความสมบูรณ์ของการอ้างอิง)
สคริปต์นี้จะปิดตัวตนใน 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
***********************
ถัดไปคุณสามารถตั้งค่าความสัมพันธ์เพื่อให้พวกเขาอัปเดตการอ้างอิงคีย์ต่างประเทศ มิฉะนั้นคุณต้องปิดการบังคับใช้ความสัมพันธ์ ลิงก์ SO นี้แสดงวิธีการ:
ข้อ จำกัด foreign key สามารถปิดใช้งานชั่วคราวโดยใช้ 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
สุดท้ายให้เปิดใช้งาน Referential Integrity อีกครั้งจากนั้นเปิดใช้งานคอลัมน์ Identity ใหม่บนคีย์หลัก
หมายเหตุ: ฉันเห็นบางคนในคำถามเหล่านี้ถามว่าทำไม ในกรณีของฉันฉันต้องรวมข้อมูลจากอินสแตนซ์การผลิตที่สองลงในฐานข้อมูลหลักเพื่อให้ฉันสามารถปิดอินสแตนซ์ที่สอง ฉันต้องการข้อมูลการดำเนินการ PK / FK ทั้งหมดเพื่อไม่ให้ชนกัน FK ของ Meta-data เหมือนกัน