Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Ajouter une colonne de clé primaire dans la table SQL

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 font référence à ce dbo.YourTable en utilisant des contraintes de clé étrangère sur le RowId préexistant colonne...

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