Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiunta di un'identità a una colonna esistente

Non puoi modificare le colonne esistenti per l'identità.

Hai 2 opzioni,

  1. Crea una nuova tabella con identità e rilascia la tabella esistente

  2. Crea una nuova colonna con identità e rilascia la colonna esistente

Approccio 1. (Nuova tabella ) Qui puoi conservare i valori dei dati esistenti nella colonna dell'identità appena creata. Nota che perderai tutti i dati se "se non esiste" non è soddisfatto, quindi assicurati di mettere anche la condizione sul 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'

Approccio 2 (Nuova colonna ) Non puoi conservare i valori dei dati esistenti nella colonna dell'identità appena creata, la colonna dell'identità conterrà la sequenza di numeri.

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'

Per ulteriori dettagli, vedere il seguente post sul forum di Microsoft SQL Server:

Come modificare la colonna in identity(1,1)