Ajouter une colonne de key primaire dans la table SQL

Je suis étudiant de RDBMS.

J'ai une question très basique disons que j'ai une table existante dans le server SQL. Quel sera le script pour modifier la table.

  • Drop Column 'RowId' s'il existe.
  • Déposez la contrainte si elle existe.
  • Ajouter une nouvelle colonne 'RowId' dans la table.
  • Faites de cette colonne la key primaire.
  • Autoincrement type int.

Dans SQL Server 2005 ou plus récent, vous pouvez utiliser ce script:

-- drop PK constraint if it exists IF EXISTS (SELECT * FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('dbo.YourTable') AND Name = 'PK_YourTable') ALTER TABLE dbo.YourTable DROP CONSTRAINT PK_YourTable GO -- drop column if it already exists IF EXISTS (SELECT * FROM sys.columns WHERE Name = 'RowId' AND object_id = OBJECT_ID('dbo.YourTable')) ALTER TABLE dbo.YourTable DROP COLUMN RowId GO -- add new "RowId" column, make it IDENTITY (= auto-incrementing) ALTER TABLE dbo.YourTable ADD RowId INT IDENTITY(1,1) GO -- add new primary key constraint on new column ALTER TABLE dbo.YourTable ADD CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED (RowId) GO 

Bien sûr, ce script peut toujours échouer si d'autres tables referencent ce dbo.YourTable utilisant des contraintes de key étrangère sur la colonne RowId préexistante …

Mise à jour: et bien sûr , partout où j'utilise dbo.YourTable ou PK_YourTable , vous devez replace ces espaces réservés par les noms réels de table / contrainte de votre propre database (vous n'avez pas mentionné ce qu'ils étaient, dans votre question ….. )

Note: cette réponse a été ajoutée avant la mise à jour des questions

  • Ajouter une nouvelle colonne (remarque: vous ne pouvez avoir qu'une seule colonne IDENTITY par table)
  • Abandonner l'ancienne key primaire
  • Ajouter une nouvelle key primaire
  • Déposez l'ancienne colonne si nécessaire

Exemple de script:

 CREATE TABLE whatever ( OldPKColumn uniqueidentifier NOT NULL, CONSTRAINT PK_whatever PRIMARY KEY (OldPKColumn) ) ALTER TABLE whatever ADD RowId int NOT NULL IDENTITY (1,1); ALTER TABLE whatever DROP CONSTRAINT PK_whatever; ALTER TABLE whatever WITH CHECK ADD CONSTRAINT PK_whatever PRIMARY KEY CLUSTERED (RowId); ALTER TABLE whatever DROP COLUMN oldPKcolumn; 

Et une pensée random … essayez-vous de réinitialiser une colonne IDENTITY?
Si oui, utilisez DBCC CHECKIDENT

Juste un commentaire pour améliorer ces excellentes réponses (je ne peux pas encore utiliser les commentaires – je suis un sharepoint réputation loin de ce privilège) et comme reference future pour moi-même:

Une nouvelle colonne IDENTITY (autonumber) peut être ajoutée et créée la key primaire dans une seule instruction:

ALTER TABLE Quel que soit ADD RowID int IDENTITY NOT NULL PRIMARY KEY;

Je préfère ne pas m'embêter avec des noms de contraintes quand ça ne sert à rien.