128

I have a table that is missing a column in its primary key constraint. Instead of editing it through SQL Server, I want to put this in a script to add it as part of our update scripts.

What syntax can I use to do this? Must I drop and recreate the key constraint?

Himanshu
  • 31,810
  • 31
  • 111
  • 133
Jason Rae
  • 2,583
  • 5
  • 25
  • 34
  • 5
    AFAIK yes, you need to drop and recreate the PK constraint. I don't recall any command to add a column to an already-existing PK/FK constraint. – Seramme Jan 06 '12 at 17:12

6 Answers6

195

Yes. The only way would be to drop the constraint with an Alter table then recreate it.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)
Oleg Dok
  • 21,109
  • 4
  • 45
  • 54
darnir
  • 4,870
  • 4
  • 32
  • 47
  • 12
    If you don't know the primary key constraint name, use query found here to look it up (or look up and drop all at once). [http://stackoverflow.com/a/13948609/945875](http://stackoverflow.com/a/13948609/945875) – Justin Dec 19 '13 at 20:06
  • if it wasn't clear, or anyone else makes the same mistake, the constraint name can't go in quotes `alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187` is working here – Maslow Dec 09 '15 at 19:03
  • 3
    For those of you, not knowing the constraint name: ALTER TABLE `db`.`table` DROP PRIMARY KEY, ADD PRIMARY KEY (`id1`, `id2`); – karsten314159 Dec 13 '18 at 12:24
  • 3
    ALTER TABLE db.table DROP PRIMARY KEY is for MySQL. (Not MSSQL.) – Roy Latham Sep 25 '20 at 16:43
25

PRIMARY KEY CONSTRAINT cannot be altered, you may only drop it and create again. For big datasets it can cause a long run time and thus - table inavailability.

Oleg Dok
  • 21,109
  • 4
  • 45
  • 54
4

Performance wise there is no point to keep non clustered indexes during this as they will get re-updated on drop and create. If it is a big data set you should consider renaming the table (if possible , any security settings on it?), re-creating an empty table with the correct keys migrate all data there. You have to make sure you have enough space for this.

Oky
  • 43
  • 3
4

In my case, I want to add a column to a Primary key (column4). I used this script to add column4

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)
MNF
  • 687
  • 9
  • 13
4

PRIMARY KEY CONSTRAINT can only be drop and then create again. For example in MySQL:

ALTER TABLE table_name DROP PRIMARY KEY;
ALTER TABLE table_name ADD PRIMARY KEY (Column1,Column2);
Saad Mahmood
  • 167
  • 11
-4

you can rename constraint objects using sp_rename (as described in this answer)

for example:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'
Community
  • 1
  • 1