IDENTITY
制約を既存の列に追加することはできないため、これを追加する方法を最初に考える必要があります。次の 2 つのオプションがあります。
- ID を持つ主キーを含む新しいテーブルを作成し、既存のテーブルを削除します
- ID を持つ新しい主キー列を作成し、既存の「P_ID」列を削除します
ALTER TABLE...SWITCH
3 番目の方法があります。これは、ステートメントを介した非常に大きなテーブルのより良いアプローチです。それぞれの例については、既存の列への の追加IDENTITY
を参照してください。この質問への回答として、テーブルが大きすぎない場合は、次を実行することをお勧めします。
-- 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
に含めます。SQLのPRIMARY KEY
作成を参照してください。IDENTITY
PRIMARY KEY