sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo cambiar programáticamente la columna sin identidad a la identidad uno?

Hasta donde yo sé, debe crear una tabla temporal con el campo ID creado como IDENTIDAD, luego copiar todos los datos de la tabla original. Finalmente, suelta la tabla original y cambia el nombre de la temporal. Este es un ejemplo con una tabla (llamada TestTable ) que contiene solo un campo, llamado ID (entero, no IDENTIDAD):

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