2012-01-06 15 views
65

Mam tabela, w której brakuje kolumny w ograniczeniu klucza podstawowego. Zamiast edytować go przez SQL Server, chcę umieścić go w skrypcie, aby dodać go jako część naszych skryptów aktualizacji.Jak zmienić ograniczenie klucza podstawowego za pomocą składni SQL?

Jakiej składni można użyć, aby to zrobić? Czy muszę upuścić i ponownie utworzyć ograniczenie klucza?

+3

AFAIK tak, należy usunąć i ponownie utworzyć ograniczenie PK. Nie przypominam żadnego polecenia dodania kolumny do już istniejącego ograniczenia PK/FK. – Seramme

Odpowiedz

96

Tak. Jedynym sposobem jest zrzucenie ograniczenia za pomocą tabeli Alter, a następnie odtworzenie go.

ALTER TABLE <Table_Name> 
DROP CONSTRAINT <constraint_name> 

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

Jeśli nie znasz nazwy ograniczenia klucza podstawowego, użyj szukanego zapytania, aby wyszukać (lub wyszukać i upuścić wszystkie naraz). [http://stackoverflow.com/a/13948609/945875](http://stackoverflow.com/a/13948609/945875) – Justin

+0

jeśli nie było jasne, lub ktoś inny popełnia ten sam błąd, nazwa ograniczenia może idź w cudzysłów 'alter table PatientsInfo Zrzuć ograniczenie PK__Patients__1CBB51380A338187' działa tutaj – Maslow

17

PRIMARY KEY CONSTRAINT nie można zmienić, możesz ją upuścić i ponownie utworzyć. W przypadku dużych zestawów danych może to spowodować długi czas działania, a co za tym idzie - niedostępność tabeli.

-4

można zmienić nazwę ograniczenie obiektów za pomocą procedury sp_rename (jak opisano w this answer)

na przykład:

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

Pytanie brzmiało, jak zmienić ograniczenie, tj. DODAĆ kolumnę, a nie jak zmienić nazwę. –

1

Wydajność mądry nie ma sensu trzymać non klastrowych indeksów podczas tego jak będą się re- zaktualizowano po upuszczeniu i utworzeniu. Jeśli jest to duży zestaw danych, należy rozważyć zmianę nazwy tabeli (jeśli to możliwe, ustawienia zabezpieczeń na nim?), Ponowne utworzenie pustej tabeli z prawidłowymi kluczami spowoduje migrację wszystkich danych. Musisz się upewnić, że masz wystarczająco dużo miejsca na to.

Powiązane problemy