IDENTITY
制約はあなたが追加どのようにこれはあなたの最初の思想である必要があり、既存の列に追加することはできません。 2つのオプションがあります。
- は、既存の「P_ID」列を識別して、主キーを含む新しいテーブルを作成し、既存のテーブルに
- をドロップアイデンティティを持つ新しい主キー列を作成し、ドロップ
第3の方法があります。これは、ALTER TABLE...SWITCH
ステートメントを使用して非常に大きなテーブルに適した方法です。それぞれの例については、Adding an IDENTITY
to an existing columnを参照してください。テーブルがあまり大きくない場合は、この質問への答えでは、私は次のことを実行することはお勧め:
-- Check that the table/column exist and no primary key is already on the table.
IF COL_LENGTH('PERSONS','P_ID') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME = 'PERSONS')
-- Add table schema to the WHERE clause above e.g. AND TABLE_SCHEMA ='dbo'
BEGIN
ALTER TABLE PERSONS
ADD P_ID_new int IDENTITY(1, 1)
GO
ALTER TABLE PERSONS
DROP COLUMN P_ID
GO
EXEC sp_rename 'PERSONS.P_ID_new', 'P_ID', 'Column'
GO
ALTER TABLE PERSONS
ADD CONSTRAINT PK_P_ID PRIMARY KEY CLUSTERED (P_ID)
GO
END
注: を明示的に主キー制約が特定の名前を与えられたのではなくされCONSTRAINT
キーワードを使用することにより自動的に名前を割り当てるSQL Serverに依存します。
には、特定のP_IDに対する検索のバランスと書き込み量が他のインデックスによってテーブルをクラスタリングする利点を上回る場合にのみ、CLUSTERED
が含まれます。 Create SQL IDENTITY
as PRIMARY KEY
を参照してください。
あなたは1つの回答に合格とマークする必要があります。 –