Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server mengonversi kolom menjadi kolom identitas

Sayangnya, Anda tidak dapat mengubah bidang menjadi IDENTITY pada tabel yang ada.

Anda harus:

  • Buat tabel baru dengan IDENTITY lapangan
  • Masalah SET IDENTITY_INSERT ON untuk tabel baru
  • Memasukkan data ke tabel baru
  • Masalah SET IDENTITY_INSERT OFF untuk tabel baru
  • Jatuhkan meja lama
  • Ganti nama tabel baru menjadi nama lama.

Anda dapat menggunakan SSMS untuk mengubah jenis bidang, itu akan melakukan semua ini untuk Anda di belakang layar.

Berikut contoh tabelnya:

CREATE TABLE plain (id INT NOT NULL PRIMARY KEY)

INSERT
INTO    plain
VALUES  (1000)

dan skrip yang dihasilkan oleh 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. bukan nama fungsi bawaan yang dikenali

  2. Tidak dapat menggunakan UPDATE dengan klausa OUTPUT saat pemicu ada di atas meja

  3. EF4.1:Mungkinkah memiliki hubungan nol-atau-satu ke nol-atau-satu (0..1 hingga 0.1)?

  4. Sorotan Cloud Basic:Alat Pemantau Kinerja Basis Data Gratis Terbaik

  5. Daftar semua kolom indeks &indeks di SQL Server DB