sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server konverterar kolumn till en identitetskolumn

Tyvärr kan du inte ändra ett fält till IDENTITY på ett befintligt bord.

Du bör:

  • Skapa en ny tabell med IDENTITY fältet
  • Utfärda SET IDENTITY_INSERT ON för det nya bordet
  • Infoga data i den nya tabellen
  • Utfärda SET IDENTITY_INSERT OFF för det nya bordet
  • Släpp den gamla tabellen
  • Byt namn på den nya tabellen till det gamla namnet.

Du kan använda SSMS för att ändra fälttypen kommer den att göra allt detta åt dig bakom kulisserna.

Här är en exempeltabell:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO    plain
VALUES  (1000)

och skriptet som genereras av 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. Hur standardiseras flera värden i kolumnen?

  2. Hur man infogar, tar bort, väljer, uppdaterar värden i datagridview i C# med MYSQL

  3. Söker efter ett tomt resultat (PHP, PDO och MySQL)

  4. Hur lagrar man decimalvärden i SQL Server?