sql >> Database >  >> RDS >> Sqlserver

Hoe verander ik een programmatisch niet-identiteitskolom in een identiteitskolom?

Voor zover ik weet, moet je een tijdelijke tabel maken met het ID-veld gemaakt als IDENTITY en vervolgens alle gegevens uit de originele tabel kopiëren. Ten slotte laat je de originele tabel vallen en hernoem je de tijdelijke. Dit is een voorbeeld met een tabel (genaamd TestTable ) dat slechts één veld bevat, genaamd 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


  1. Probleem bij het bouwen van cx_Oracle - libclntsh.so.11.1 => niet gevonden

  2. MySQL Boolean tinyint(1) bevat waarden tot 127?

  3. Correct ontsnappend streepje (-) in mysql-query

  4. Waarom zou het selecteren van de Top-clausule tot langdurige kosten kunnen leiden?