Bagaimana cara mengubah batasan kunci utama menggunakan sintaks SQL?


100

Saya memiliki tabel yang tidak memiliki kolom dalam batasan kunci utamanya. Alih-alih mengeditnya melalui SQL Server, saya ingin memasukkan ini ke dalam skrip untuk menambahkannya sebagai bagian dari skrip pembaruan kami.

Sintaks apa yang dapat saya gunakan untuk melakukan ini? Haruskah saya melepaskan dan membuat ulang batasan utama?


5
AFAIK ya, Anda perlu menghentikan dan membuat ulang batasan PK. Saya tidak ingat perintah apa pun untuk menambahkan kolom ke batasan PK / FK yang sudah ada.
Seramme

Jawaban:


149

Iya. Satu-satunya cara adalah menghilangkan batasan dengan tabel Alter lalu membuatnya kembali.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

11
Jika Anda tidak mengetahui nama batasan kunci utama, gunakan kueri yang ditemukan di sini untuk mencarinya (atau cari dan lepas semuanya sekaligus). http://stackoverflow.com/a/13948609/945875
Justin

jika tidak jelas, atau orang lain membuat kesalahan yang sama, nama batasan tidak bisa masuk tanda kutip alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187berfungsi di sini
Maslow

1
Bagi Anda yang belum mengetahui batasan nama: ALTER TABLE db. table DROP KUNCI UTAMA, TAMBAHKAN KUNCI UTAMA ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTtidak dapat diubah, Anda hanya dapat melepaskannya dan membuat lagi. Untuk kumpulan data besar, ini dapat menyebabkan waktu jangka panjang dan dengan demikian - tabel tidak tersedia.


3

Dari segi kinerja, tidak ada gunanya mempertahankan indeks yang tidak berkerumun selama ini karena mereka akan diperbarui ulang saat drop dan buat. Jika ini adalah kumpulan data besar, Anda harus mempertimbangkan untuk mengganti nama tabel (jika mungkin, pengaturan keamanan apa saja?), Membuat ulang tabel kosong dengan kunci yang benar, memigrasikan semua data di sana. Anda harus memastikan Anda memiliki cukup ruang untuk ini.


3

Dalam kasus saya, saya ingin menambahkan kolom ke kunci Primer (kolom4). Saya menggunakan skrip ini untuk menambahkan kolom4

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

Anda dapat mengganti nama objek kendala menggunakan sp_rename (seperti yang dijelaskan dalam jawaban ini )

sebagai contoh:

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

3
Pertanyaannya adalah bagaimana mengubah batasan, yaitu TAMBAHKAN kolom, bukan bagaimana mengganti nama.
Andrew Steitz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.