2012-12-17 18 views
10

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

新しい列が追加さ:Product_Detail_IDintnot nullを)

私はProduct_Detail_IDに主キーを追加しようとしています(注意:この表に割り当てられている他の主キーまたは外部キーが存在しない)

私がしようとしていますこのクエリではエラーが発生します。

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

エラー:

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).

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

+3

を達成することができたあなたのテーブルには、この列の重複値を持っていますが、主キーは列内の値が一意であることが必要です。 PKを作成するには、重複を削除する必要があります。 –

+1

テーブルにデータが含まれていますか?この場合、pk列にする前に、新しい列に一意の値があることを確認する必要があります。 –

+0

新しい値で列を更新しましたか?または、あなたのエラーメッセージに示されているように、それらはすべて '0'ですか?そのフィールドの*すべての*値が他の値と異なることを確認してください。 – MatBailie

答えて

20

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 
+0

ご協力いただきありがとうございます。このクエリも私のために働いたが、手動でデータを挿入して(200を編集して)、クエリで実行する。 – Joy1979

1

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

それを修正するには2通りの方法があります。

  • は「NOCHECK WITH」オプションを使用して制約を追加し、制約を追加する前に既存のデータをクリーンアップする、これは既存のデータをチェックし、SQLサーバーを停止します、新しいデータのみがJayaここ
+2

'WITH NOCHECK'を使うと、ほとんど常に悪い考えです。) –

+2

" NOCHECK "はプライマリまたはユニークキーでは機能しません。 –

1
ALTER TABLE Jaya 
    ADD CONSTRAINT no primary key(No); 

をチェックされます

、テーブル名です

no

ADD CONSTRAINTたちは、主キーのキーワードに

-1

Kを与えている、列名です。フレンド コマンド: sql> alter table tablenameプライマリキー(col_name)を追加します。

例:alter table pk_Product_Detilsプライマリキー(Product_Detail_ID)を追加します。 MySQLでは

+0

この回答は、既に提供されている回答とはどのような違いがありますか? – EWit

1

、私は次のクエリで

ALTER TABLE table_name ADD new_column int NOT NULL AUTO_INCREMENT primary key

関連する問題