ฉันจะแก้ไขข้อ จำกัด ของคีย์หลักโดยใช้ไวยากรณ์ SQL ได้อย่างไร


100

ฉันมีตารางที่ไม่มีคอลัมน์ในข้อ จำกัด คีย์หลัก แทนที่จะแก้ไขผ่าน SQL Server ฉันต้องการใส่สิ่งนี้ในสคริปต์เพื่อเพิ่มเป็นส่วนหนึ่งของสคริปต์อัพเดตของเรา

ฉันสามารถใช้ไวยากรณ์อะไรเพื่อทำสิ่งนี้ ฉันต้องปล่อยและสร้างข้อ จำกัด ของคีย์ใหม่หรือไม่?


5
AFAIK ใช่คุณต้องวางและสร้างข้อ จำกัด PK ขึ้นใหม่ ฉันจำคำสั่งใด ๆ ในการเพิ่มคอลัมน์ในข้อ จำกัด PK / FK ที่มีอยู่แล้วไม่ได้
Seramme

คำตอบ:


149

ใช่. วิธีเดียวก็คือการวางข้อ จำกัด ด้วยตาราง Alter แล้วสร้างขึ้นใหม่

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)

11
หากคุณไม่ทราบชื่อข้อ จำกัด ของคีย์หลักให้ใช้คำค้นหาที่พบที่นี่เพื่อค้นหา (หรือค้นหาและวางทั้งหมดพร้อมกัน) http://stackoverflow.com/a/13948609/945875
Justin

หากไม่ชัดเจนหรือมีใครทำผิดแบบเดียวกันชื่อข้อ จำกัด ไม่สามารถใส่เครื่องหมายคำพูดได้alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187ก็ทำงานที่นี่
Maslow

1
สำหรับบรรดาของคุณไม่ทราบชื่อ จำกัด : dbเปลี่ยนแปลงตาราง table วางคีย์หลักเพิ่มคีย์หลัก ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTไม่สามารถเปลี่ยนแปลงได้คุณสามารถวางและสร้างใหม่ได้เท่านั้น สำหรับชุดข้อมูลขนาดใหญ่อาจทำให้ใช้งานได้นานและทำให้ไม่สามารถใช้งานตารางได้


3

ประสิทธิภาพที่ชาญฉลาดไม่มีจุดที่จะเก็บดัชนีที่ไม่ใช่คลัสเตอร์ในระหว่างนี้เนื่องจากจะได้รับการอัปเดตใหม่เมื่อปล่อยและสร้าง หากเป็นชุดข้อมูลขนาดใหญ่คุณควรพิจารณาเปลี่ยนชื่อตาราง (ถ้าเป็นไปได้การตั้งค่าความปลอดภัยบนตารางนั้นหรือไม่) สร้างตารางว่างขึ้นมาใหม่โดยใช้คีย์ที่ถูกต้องจะย้ายข้อมูลทั้งหมดไปที่นั่น คุณต้องแน่ใจว่าคุณมีพื้นที่เพียงพอสำหรับสิ่งนี้


3

ในกรณีของฉันฉันต้องการเพิ่มคอลัมน์ในคีย์หลัก (คอลัมน์ 4) ฉันใช้สคริปต์นี้เพื่อเพิ่มคอลัมน์ 4

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)

-4

คุณสามารถเปลี่ยนชื่อวัตถุข้อ จำกัด โดยใช้ sp_rename (ตามที่อธิบายไว้ในคำตอบนี้ )

ตัวอย่างเช่น:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'

3
คำถามคือวิธีการเปลี่ยนข้อ จำกัด เช่นเพิ่มคอลัมน์ไม่ใช่วิธีการเปลี่ยนชื่อ
Andrew Steitz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.