Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding column with primary key in existing table

I am trying to add primary key to newly added column in existing table name Product_Details.

New Column added: Product_Detail_ID (int and not null)

I am trying add primary key to Product_Detail_ID (please note: there are no other primary or foreign key assigned to this table)

I am trying with this query but getting error.

ALTER TABLE Product_Details
ADD CONSTRAINT pk_Product_Detils_Product_Detail_ID PRIMARY KEY(Product_Detail_ID)
GO

Error:

The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.Product\_Details' and the index name 'pk\_Product\_Detils'. The duplicate key value is (0).

Am I missing something here? I am using SQL Server 2008 R2. I would appreciate any help.

like image 886
Joy1979 Avatar asked Dec 17 '12 21:12

Joy1979


People also ask

Can I add a primary key to an existing table?

Because a table can have only one primary key, you cannot add a primary key to a table that already has a primary key defined. To change the primary key of a table, delete the existing key using a DROP clause in an ALTER TABLE statement and add the new primary key.

How do I add a column to an already created table?

The basic syntax of an ALTER TABLE command to add a New Column in an existing table is as follows. ALTER TABLE table_name ADD column_name datatype; The basic syntax of an ALTER TABLE command to DROP COLUMN in an existing table is as follows.


4 Answers

If you want SQL Server to automatically provide values for the new column, make it an identity.

ALTER TABLE Product_Details DROP COLUMN Product_Detail_ID
GO
ALTER TABLE Product_Details ADD Product_Detail_ID int identity(1,1) not null
GO
ALTER TABLE Product_Details
add CONSTRAINT pk_Product_Detils_Product_Detail_ID primary key(Product_Detail_ID)
GO
like image 83
RichardTheKiwi Avatar answered Oct 24 '22 00:10

RichardTheKiwi


In mysql, I was able to achieve with following query

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

like image 35
Chokho Avatar answered Oct 23 '22 23:10

Chokho


You are getting the error because you have existing data that does not fullfill the constraint.

There are 2 ways to fix it:

  • clean up the existing data before adding the constraint
  • add the constraint with the "WITH NOCHECK" option, this will stop sql server checking existing data, only new data will be checked
like image 32
Shiraz Bhaiji Avatar answered Oct 23 '22 23:10

Shiraz Bhaiji


Add Primary Key to First Position

ALTER TABLE table_name 
ADD column_name INT PRIMARY KEY AUTO_INCREMENT FIRST;

Reference: Stack Overflow | Tech On The Net

like image 1
Deepam Gupta Avatar answered Oct 23 '22 23:10

Deepam Gupta