Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment changer par programme la colonne de non-identité en identité un?

Autant que je sache, vous devez créer une table temporaire avec le champ ID créé comme IDENTITY, puis copier toutes les données de la table d'origine. Enfin, vous supprimez la table d'origine et renommez la table temporaire. Ceci est un exemple avec une table (nommée TestTable ) qui ne contient qu'un seul champ, appelé ID (entier, 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