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

Ajouter une identité à une colonne existante

Vous ne pouvez pas modifier les colonnes existantes pour l'identité.

Vous avez 2 options,

  1. Créez une nouvelle table avec l'identité et supprimez la table existante

  2. Créez une nouvelle colonne avec l'identité et supprimez la colonne existante

Approche 1. (Nouveau tableau ) Ici, vous pouvez conserver les valeurs de données existantes sur la colonne d'identité nouvellement créée. Notez que vous perdrez toutes les données si 'if not exists' n'est pas satisfait, alors assurez-vous de mettre également la condition sur le drop !

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 message suivant du forum Microsoft SQL Server pour plus de détails :

Comment modifier la colonne en identité (1,1)