web-dev-qa-db-ja.com

既存のテーブルに主キーを持つ列を追加する

既存のテーブル名Product_Detailsに新しく追加された列に主キーを追加しようとしています。

新しい列が追加されました:Product_Detail_IDintおよびnot null

Product_Detail_IDに主キーを追加しようとしています(このテーブルに割り当てられている他の主キーまたは外部キーはありません)

このクエリを試していますが、エラーが発生しています。

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

エラー:

オブジェクト名CREATE UNIQUE INDEXおよびインデックス名'dbo.Product\_Details'の重複キーが見つかったため、'pk\_Product\_Detils'ステートメントは終了しました。重複キーの値は(0)です

ここに何かが足りませんか? SQL Server 2008 R2を使用しています。助けていただければ幸いです。

18
Joy1979

SQL Serverが新しい列の値を自動的に提供するようにする場合は、それをIDにします。

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
32
RichardTheKiwi
ALTER TABLE Jaya 
  ADD CONSTRAINT no primary key(No);

ここでJayaはテーブル名、

noは列名、

ADD CONSTRAINT主キーキーワードを指定していますか

1
JayaN

制約を満たさない既存のデータがあるため、エラーが発生しています。

修正するには2つの方法があります。

  • 制約を追加する前に既存のデータをクリーンアップします
  • 「WITH NOCHECK」オプションで制約を追加します。これにより、既存のデータをチェックするSQLサーバーが停止し、新しいデータのみがチェックされます
1
Shiraz Bhaiji

Mysqlでは、次のクエリで達成できました

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

1
Chokho