Ajouter une identité à une colonne existante

Ajouter une identité à une colonne existante


Source : [Stack Overflow [sql-server]](How to alter column to identity(1,1) - Microsoft Q&A

Vous ne pouvez pas modifier les colonnes existantes pour y ajouter une identité.

Vous avez 2 options :

Créer une nouvelle table avec identité et supprimer la table existante

Créer une nouvelle colonne avec identité et supprimer la colonne existante

Approche 1. (Nouvelle table) Ici vous pouvez conserver les valeurs de données existantes dans la colonne d’identité nouvellement créée. Notez que vous perdrez toutes les données si la condition ‘if not exists’ n’est pas satisfaite, alors assurez-vous de mettre la condition sur le drop aussi !

`CREATE TABLE dbo.Tmp_Names
(
Id int NOT NULL
IDENTITY(1, 1),
Name varchar(50) NULL
)
ON [PRIMARY]
go

SET IDENTITY_INSERT dbo.Tmp_Names ON
go

IF EXISTS ( SELECT *
FROM dbo.Names )
INSERT INTO dbo.Tmp_Names ( Id, Name )
SELECT Id,
Name
FROM dbo.Names TABLOCKX
go

SET IDENTITY_INSERT dbo.Tmp_Names OFF
go

DROP TABLE dbo.Names
go

Exec sp_rename ‘Tmp_Names’, ‘Names’


Approche 2 (*Nouvelle colonne*) Vous ne pouvez pas conserver les valeurs de données existantes dans la colonne d'identité nouvellement créée, la colonne d'identité contiendra la séquence de nombres.

`Alter Table Names
Add Id_new Int Identity(1, 1)
Go

Alter Table Names Drop Column ID
Go

Exec sp_rename 'Names.Id_new', 'ID', 'Column'

Consultez le post suivant du forum Microsoft SQL Server pour plus de détails :

How to alter column to identity(1,1)