Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Hinzufügen einer Identität zu einer vorhandenen Spalte

Sie können die vorhandenen Spalten für die Identität nicht ändern.

Sie haben zwei Möglichkeiten,

  1. Erstellen Sie eine neue Tabelle mit Identität und löschen Sie die vorhandene Tabelle

  2. Erstellen Sie eine neue Spalte mit Identität und löschen Sie die vorhandene Spalte

Ansatz 1. (Neue Tabelle ) Hier können Sie die vorhandenen Datenwerte in der neu erstellten Identitätsspalte beibehalten. Beachten Sie, dass Sie alle Daten verlieren, wenn 'wenn nicht vorhanden' nicht erfüllt ist, stellen Sie also sicher, dass Sie die Bedingung auch auf den Drop setzen!

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'

Ansatz 2 (Neue Spalte ) Sie können die vorhandenen Datenwerte in der neu erstellten Identitätsspalte nicht beibehalten. Die Identitätsspalte enthält die Zahlenfolge.

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'

Weitere Einzelheiten finden Sie im folgenden Beitrag des Microsoft SQL Server-Forums:

So ändern Sie die Spalte in Identität (1,1)