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

Wie kann man die Nicht-Identitätsspalte programmgesteuert in eine Identitätsspalte ändern?

Soweit ich weiß, müssen Sie eine temporäre Tabelle mit dem als IDENTITY erstellten ID-Feld erstellen und dann alle Daten aus der ursprünglichen Tabelle kopieren. Schließlich löschen Sie die ursprüngliche Tabelle und benennen die temporäre um. Dies ist ein Beispiel mit einer Tabelle (mit dem Namen TestTable ), das nur ein Feld namens ID (Integer, nicht IDENTITY) enthält:

BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
    (
    ID int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable ON
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
     EXEC('INSERT INTO dbo.Tmp_TestTable (ID)
        SELECT ID FROM dbo.TestTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable OFF
GO
DROP TABLE dbo.TestTable
GO
EXECUTE sp_rename N'dbo.Tmp_TestTable', N'TestTable', 'OBJECT' 
GO
COMMIT