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.