Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server konwertuje kolumnę na kolumnę tożsamości

Niestety nie możesz zmienić pola na IDENTITY na istniejącym stole.

Powinieneś:

  • Utwórz nową tabelę z IDENTITY pole
  • Problem SET IDENTITY_INSERT ON dla nowego stołu
  • Wstaw dane do nowej tabeli
  • Wyłącz SET IDENTITY_INSERT OFF dla nowego stołu
  • Upuść stary stół
  • Zmień nazwę nowej tabeli na starą.

Możesz użyć SSMS aby zmienić typ pola, zrobi to wszystko za Ciebie za kulisami.

Oto przykładowa tabela:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO    plain
VALUES  (1000)

i skrypt wygenerowany przez SSMS :

SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_plain
    (
    id int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_plain SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_plain ON
GO
IF EXISTS(SELECT * FROM dbo.plain)
     EXEC('INSERT INTO dbo.Tmp_plain (id)
        SELECT id FROM dbo.plain WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_plain OFF
GO
DROP TABLE dbo.plain
GO
EXECUTE sp_rename N'dbo.Tmp_plain', N'plain', 'OBJECT' 
GO
ALTER TABLE dbo.plain ADD CONSTRAINT
    PK__plain__3213E83F1A609306 PRIMARY KEY CLUSTERED 
    (
    id
    ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

GO
COMMIT


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kolejność sortowania SQL z ostatnimi wartościami Null

  2. 4 sposoby na wyświetlenie listy wszystkich widoków w bazie danych SQL Server

  3. Korzystanie z GO w ramach transakcji

  4. SQL Server, Jak ustawić automatyczny przyrost po utworzeniu tabeli bez utraty danych?

  5. Jak uniknąć szkodliwego wpływu monitora aktywności na wydajność serwera SQL?