sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server konverter kolonne til en identitetskolonne

Desværre kan du ikke ændre et felt til IDENTITY på et eksisterende bord.

Du bør:

  • Opret en ny tabel med IDENTITY felt
  • Udsted SET IDENTITY_INSERT ON til det nye bord
  • Indsæt dataene i den nye tabel
  • Udsted SET IDENTITY_INSERT OFF til det nye bord
  • Slip den gamle tabel
  • Omdøb den nye tabel til det gamle navn.

Du kan bruge SSMS for at ændre felttypen, vil den gøre alt dette for dig bag kulisserne.

Her er en eksempeltabel:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO    plain
VALUES  (1000)

og scriptet genereret af 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. Hvordan får jeg kolonnenavne fra en given MySQL-tabel?

  2. SQL 1064 Syntaksfejl ved brug af en JDBC-forberedt sætning

  3. Python + PostgreSQL + mærkelig ascii =UTF8-kodningsfejl

  4. Eager-Loading baseret på den første forespørgsel