Un site IDENTITY
contrainte ne peut pas être ajoutée à une colonne existante Vous devez donc commencer par réfléchir à la manière dont vous allez ajouter ces éléments. Il existe deux options :
- Créez une nouvelle table incluant une clé primaire avec identité et supprimez la table existante.
- Créez une nouvelle colonne clé primaire avec identité et supprimez la colonne 'P_ID' existante.
Il existe une troisième voie, qui est une meilleure approche pour les très grandes tables via l'option ALTER TABLE...SWITCH
déclaration. Voir Ajout d'un IDENTITY
à une colonne existante pour un exemple de chacun. En réponse à cette question, si le tableau n'est pas trop grand, je recommande d'exécuter ce qui suit :
-- 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
Notas: En utilisant explicitement l'option CONSTRAINT
la contrainte de clé primaire reçoit un nom particulier plutôt que de dépendre de SQL Server pour attribuer automatiquement un nom.
N'inclure que CLUSTERED
sur le PRIMARY KEY
si l'équilibre entre les recherches pour un P_ID particulier et la quantité d'écriture l'emporte sur les avantages d'un regroupement de la table par un autre index. Voir Créer SQL IDENTITY
comme PRIMARY KEY
.