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

Cara Memasukkan Nilai ke dalam Kolom IDENTITAS di SQL Server

Jika Anda pernah mencoba memasukkan nilai ke dalam kolom identitas di SQL Server, Anda mungkin melihat kesalahan seperti ini:

Tidak dapat menyisipkan nilai eksplisit untuk kolom identitas dalam tabel 'Artis' saat IDENTITY_INSERT disetel ke OFF.

Ini normal. Kolom identitas ada karena suatu alasan. Ini secara otomatis mengisi kolom dengan nilai yang bertambah untuk setiap baris yang disisipkan. Oleh karena itu, Anda tidak perlu memasukkan nilai ke dalam kolom tersebut.

Namun, terkadang Anda melakukannya perlu memasukkan nilai ke dalam kolom identitas. Misalnya, Anda dapat mengisi database dengan data yang perlu mempertahankan nilai identitasnya sendiri. Jika demikian, Anda harus mengganti IDENTITY Properti. Begini caranya.

Aktifkan IDENTITY_INSERT

Anda dapat mengganti IDENTITY properti dengan mengaktifkan IDENTITY_INSERT . Ini memungkinkan Anda untuk memasukkan nilai Anda sendiri ke dalam kolom identitas.

Ini contohnya:

SET IDENTITY_INSERT Artists ON;
INSERT INTO Artists (ArtistId, ArtistName, ActiveFrom)   
VALUES 
  (1001, 'AC/DC','1973-01-11'), 
  (1002, 'Allan Holdsworth','1969-01-01'),
  (1003, 'Buddy Rich','1919-01-01');
SET IDENTITY_INSERT Artists OFF;

Dalam contoh ini, tabel Artis memiliki kolom identitas (dalam hal ini, ArtistId adalah kolom identitas). Untuk mengganti IDENTITY properti kita cukup mendahului INSERT pernyataan dengan SET IDENTITY_INSERT Artists ON . Pernyataan T-SQL ini memungkinkan Anda untuk mengatakan “Saya tahu tabel ini memiliki kolom identitas tetapi dalam kasus ini, masukkan saya sebagai gantinya”.

Perhatikan bahwa IDENTITY_INSERT hanya dapat diaktifkan pada satu tabel dalam satu waktu. Oleh karena itu, sebaiknya nonaktifkan IDENTITY_INSERT segera setelah penyisipan. Ini mengembalikannya ke keadaan semula, dan memungkinkan Anda untuk mengganti kolom identitas pada tabel yang berbeda jika diperlukan.

Juga, untuk mengaktifkan IDENTITY_INSERT pengguna harus memiliki tabel atau memiliki ALTER izin di atas meja.

Menyalin Antar Tabel

Mengaktifkan IDENTITY_INSERT juga dapat berguna saat Anda menyalin data antar tabel. Misalnya, Anda dapat mengisi satu tabel dari tabel lainnya.

Berikut contoh menyalin data dari tabel Artists ke tabel Artists_Archive:

SET IDENTITY_INSERT Artists_Archive ON;
INSERT INTO Artists_Archive (ArtistId, ArtistName, ActiveFrom)
  SELECT ArtistId, ArtistName, ActiveFrom
	FROM Artists;
SET IDENTITY_INSERT Artists_Archive OFF;

Satu hal yang perlu diperhatikan adalah, jika kolom identitas memiliki batasan kunci utama, ia akan menolak nilai apa pun yang sudah ada di tabel tujuan. Jadi, Anda harus benar-benar yakin bahwa mengganti kolom identitas adalah hal yang pasti ingin Anda lakukan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SUM() Fungsi di SQL Server

  2. Keunggulan Kinerja SQL Server 2016 Enterprise Edition

  3. Penggunaan SQL Server sp_msforeachtable untuk memilih hanya tabel yang memenuhi beberapa kondisi

  4. Variabel peka huruf besar/kecil di SQL Server

  5. T-SQL Bagaimana cara membuat tabel secara dinamis dalam prosedur tersimpan?