SQL sözdizimini kullanarak birincil anahtar kısıtlamasını nasıl değiştirebilirim?


100

Birincil anahtar kısıtlamasında bir sütun eksik olan bir tablom var. Bunu SQL Server aracılığıyla düzenlemek yerine, güncelleme komut dosyalarımızın bir parçası olarak eklemek için bunu bir komut dosyasına koymak istiyorum.

Bunu yapmak için hangi sözdizimini kullanabilirim? Anahtar kısıtlamasını kaldırmalı ve yeniden oluşturmalı mıyım?


5
AFAIK evet, PK kısıtlamasını kaldırmanız ve yeniden oluşturmanız gerekir. Zaten var olan bir PK / FK kısıtlamasına sütun eklemek için herhangi bir komut hatırlamıyorum.
Seramme

Yanıtlar:


149

Evet. Tek yol, kısıtlamayı bir Alter tablosuyla kaldırıp yeniden oluşturmaktır.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

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

11
Birincil anahtar kısıtlama adını bilmiyorsanız, aramak için burada bulunan sorguyu kullanın (veya bir kerede bakın ve bırakın). http://stackoverflow.com/a/13948609/945875
Justin

Açık değilse veya başka biri aynı hatayı yaparsa, kısıtlama adı alıntılara alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187
Maslow

1
Kısıtlama adını bilmeyenler için: ALTER TABLE db. table BİRİNCİL ANAHTARI BIRAK, BİRİNCİL ANAHTAR EKLE ( id1, id2);
karsten314159

21

PRIMARY KEY CONSTRAINTdeğiştirilemez, sadece bırakabilir ve yeniden oluşturabilirsiniz. Büyük veri kümeleri için uzun bir çalışma süresine ve dolayısıyla tablonun kullanılamamasına neden olabilir.


3

Performans açısından, bu sırada kümelenmemiş dizinleri tutmanın bir anlamı yoktur, çünkü bunlar bırakma ve oluşturma sırasında yeniden güncelleneceklerdir. Büyük bir veri kümesiyse, tabloyu yeniden adlandırmayı (mümkünse üzerinde herhangi bir güvenlik ayarı var mı?), Doğru anahtarlarla boş bir tabloyu yeniden oluşturarak tüm verileri oraya taşımayı düşünmelisiniz. Bunun için yeterli alana sahip olduğunuzdan emin olmalısınız.


3

Benim durumumda, Birincil anahtara (sütun4) bir sütun eklemek istiyorum. Bu komut dosyasını sütun4 eklemek için kullandım

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 kullanarak kısıtlama nesnelerini yeniden adlandırabilirsiniz ( bu cevapta açıklandığı gibi )

Örneğin:

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

3
Soru, nasıl yeniden adlandırılacağı değil, kısıtlamanın nasıl değiştirileceğiydi, yani bir sütun EKLE.
Andrew Steitz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.