2012-01-06 12 views
65

Ho una tabella che manca una colonna nel suo vincolo di chiave primaria. Invece di modificarlo tramite SQL Server, voglio inserirlo in uno script per aggiungerlo come parte dei nostri script di aggiornamento.Come è possibile modificare un vincolo di chiave primaria utilizzando la sintassi SQL?

Quale sintassi è possibile utilizzare per eseguire questa operazione? Devo eliminare e ricreare il vincolo chiave?

+3

AFAIK Sì, è necessario eliminare e ricreare il vincolo PK. Non ricordo alcun comando per aggiungere una colonna a un vincolo PK/FK già esistente. – Seramme

risposta

96

Sì. L'unico modo sarebbe quello di eliminare il vincolo con una tabella Alter e quindi ricrearlo.

ALTER TABLE <Table_Name> 
DROP CONSTRAINT <constraint_name> 

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

Se non si conosce il nome del vincolo della chiave primaria, utilizzare la query trovata qui per cercarlo (oppure cercare e rilasciare tutto in una volta). [http://stackoverflow.com/a/13948609/945875](http://stackoverflow.com/a/13948609/945875) – Justin

+0

se non è chiaro, o qualcun altro fa lo stesso errore, il nome del vincolo può 'vado tra virgolette 'alter table PatientsInfo vincolo di rilascio PK__Patients__1CBB51380A338187' funziona qui – Maslow

17

PRIMARY KEY CONSTRAINT non possono essere modificati, è possibile solo rilasciarlo e creare nuovamente. Per i set di dati di grandi dimensioni può causare un lungo periodo di tempo e quindi - l'indisponibilità della tabella.

-4

è possibile rinominare vincolo oggetti utilizzando sp_rename (come descritto nel this answer)

ad esempio:

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

La domanda era come cambiare il vincolo, cioè AGGIUNGI una colonna, non come rinominare. –

1

prestazioni saggio non v'è alcun punto da tenere indici non cluster nel corso di questo in quanto avranno ri- aggiornato su drop e creare. Se si tratta di un grande set di dati, si dovrebbe prendere in considerazione la ridenominazione della tabella (se possibile, eventuali impostazioni di sicurezza su di esso?), Ricreare una tabella vuota con le chiavi corrette migrare tutti i dati lì. Devi assicurarti di avere abbastanza spazio per questo.

Problemi correlati