Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como alterar programaticamente a coluna sem identidade para uma identidade?


Até onde eu sei, você tem que criar uma tabela temporária com o campo ID criado como IDENTITY, depois copiar todos os dados da tabela original. Finalmente, você descarta a tabela original e renomeia a temporária. Este é um exemplo com uma tabela (chamada TestTable ) que contém apenas um campo, chamado ID (integer, non IDENTITY):
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