sql >> Databáze >  >> RDS >> Sqlserver

Přidání identity do existujícího sloupce

Stávající sloupce identity nelze změnit.

Máte 2 možnosti,

  1. Vytvořte novou tabulku s identitou a zrušte stávající tabulku

  2. Vytvořte nový sloupec s identitou a zrušte stávající sloupec

Přístup 1. (Nová tabulka ) Zde můžete zachovat stávající hodnoty dat v nově vytvořeném sloupci identity. Pamatujte, že pokud není splněna podmínka 'if not exists', ztratíte všechna data, takže se ujistěte, že jste podmínku položili také!

CREATE TABLE dbo.Tmp_Names
    (
      Id int NOT NULL
             IDENTITY(1, 1),
      Name varchar(50) NULL
    )
ON  [PRIMARY]
go

SET IDENTITY_INSERT dbo.Tmp_Names ON
go

IF EXISTS ( SELECT  *
            FROM    dbo.Names ) 
    INSERT  INTO dbo.Tmp_Names ( Id, Name )
            SELECT  Id,
                    Name
            FROM    dbo.Names TABLOCKX
go

SET IDENTITY_INSERT dbo.Tmp_Names OFF
go

DROP TABLE dbo.Names
go

Exec sp_rename 'Tmp_Names', 'Names'

Přístup 2 (Nový sloupec ) Nemůžete zachovat stávající hodnoty dat v nově vytvořeném sloupci identity. Sloupec identity bude obsahovat posloupnost čísel.

Alter Table Names
Add Id_new Int Identity(1, 1)
Go

Alter Table Names Drop Column ID
Go

Exec sp_rename 'Names.Id_new', 'ID', 'Column'

Další podrobnosti naleznete v následujícím příspěvku na fóru Microsoft SQL Server:

Jak změnit sloupec na identitu(1,1)



  1. Zpětné skenování indexu SQL Server:Porozumění a ladění výkonu

  2. Jak mohu přidat sloupec, který nepovoluje hodnoty null v databázi Postgresql?

  3. Vyloučit sloupec pomocí SELECT * [kromě sloupceA] FROM tableA?

  4. ukládání objektu python v tabulce postgres s okurkou