Bagaimana cara Memperbaiki Kesalahan 'Tidak dapat memasukkan nilai eksplisit untuk kolom identitas di tabel ketika IDENTITY_INSERT diatur ke OFF'?
Kolom kunci utama sering kali disetel ke kenaikan otomatis saat membuat database SQL Server. Batas IDENTITAS ditetapkan untuk kolom kunci utama untuk melakukan ini. Lokasi awal dan langkah kenaikan ditransfer ke kolom IDENTITAS sebagai parameter. Kemudian setiap kali catatan baru ditambahkan, dan penyisipan identitas diatur ke OFF, nilai kolom IDENTITAS ditingkatkan dengan langkah yang ditentukan sebelumnya biasanya sebuah angka. Selain itu, properti IDENTITAS INSERT disetel ke AKTIF hanya untuk satu tabel dalam satu sesi.
Pada artikel ini, kita akan membahas error tersebut “Tidak dapat memasukkan nilai eksplisit untuk kolom identitas dalam tabel
saat IDENTITY_INSERT disetel ke OFF ”Kesalahan muncul saat pengguna menyetel "identity_insert" ke "OFF". Kemudian mencoba memasukkan data ke dalam kolom kunci utama tabel secara eksplisit. Ini dapat dijelaskan menggunakan contoh di bawah ini.
Pembuatan database dan tabel:
Pertama, buat database bernama "appuals".
Buat tabel bernama "orang" menggunakan kode berikut. Tabel yang dibangun menggunakan file “IDENTITAS KUNCI UTAMA”
BUAT TABEL orang (ID INT IDENTITAS (1, 1), first_name VARCHAR (MAX), last_name VARCHAR (MAX))
Sintaks untuk menyetel “identity_insert off | di":
Itu “Setel identity_insert off | di" akan membantu kami mengatasi kesalahan ini. Sintaks yang benar untuk pernyataan ini adalah seperti di bawah ini.
ATUR IDENTITY_INSERT. . {OFF | DI }
Sedangkan argumen pertama
Pada dasarnya ada dua cara penyisipan data yang berbeda ke dalam tabel tanpa kesalahan. Ini dianggap sebagai solusi untuk kesalahan ini dan dibahas di bawah ini.
Kesalahan 1: Tetapkan identitas_insert NONAKTIF
Dalam kasus pertama, kami akan memasukkan data ke dalam tabel dengan ekstensi “SISIPKAN IDENTITAS” mulai "MATI". Jadi, jika ID ada di pernyataan INSERT, Anda akan mendapatkan error “Tidak dapat memasukkan nilai eksplisit untuk kolom identitas di tabel 'person' ketika IDENTITY_INSERT disetel ke OFF”.
Jalankan kode berikut di tab kueri.
setel identity_insert person off; masukkan ke dalam nilai person (ID, first_name, last_name) (3, 'Sadia', 'Majeed'), (4, 'Michel', 'Ronald')
Outputnya akan seperti ini.
Larutan:
Saat memutar “SISIPKAN IDENTITAS”, itu“ID KUNCI UTAMA” TIDAK HARUS DIHADIRKAN ke dalam pernyataan sisipan
Sekarang jalankan kode berikut di tab kueri
setel identity_insert person off; masukkan ke dalam nilai person (first_name, last_name) ('Sadia', 'Majeed'), ('Michel', 'Ronald')
Ini akan memasukkan data ke dalam tabel tanpa kesalahan. Selain itu PRIMARY KEY ID tidak perlu disisipkan oleh pengguna, melainkan akan menambah nilai unique ID secara otomatis seperti yang terlihat pada gambar di bawah ini.
Kesalahan 2: Setel identity_insert ON
Dalam kasus kedua, kami akan memasukkan data ke dalam tabel dengan ekstensi “SISIPKAN IDENTITAS” mulai "DI". Jadi, jika ID tidak ada di pernyataan INSERT, Anda akan mendapatkan error ”Msg 545, Level 16, Negara Bagian 1, Baris 17. Nilai eksplisit harus ditentukan untuk kolom identitas di tabel 'orang' baik ketika IDENTITY_INSERT diatur ke ON atau ketika pengguna replikasi memasukkan ke kolom identitas NOT FOR REPLICATION”.
Larutan:
Saat memutar“SISIPKAN IDENTITAS” itu "KUNCI UTAMA INDO" harus ada dalam pernyataan sisipan.
Jalankan kode berikut di tab kueri
atur identity_insert person on; masukkan ke dalam nilai person (ID, first_name, last_name) (5, 'Jack', 'black'), (6, 'john', 'Wicky')
Ini akan memasukkan data ke dalam tabel tanpa kesalahan. Jadi The ID KUNCI UTAMA secara eksplisit harus dimasukkan oleh pengguna. Selain itu, ini tidak akan menambahkan nilai ID unik secara otomatis seperti yang terlihat pada gambar di bawah.
Jika kamu "SETEL IDENTITAS SISIPKAN ", itu akan tetap aktif selama seluruh sesi. Dengan demikian, Anda dapat menambahkan record sebanyak yang Anda inginkan setelah ini ditetapkan. Ini juga merujuk hanya pada sesi yang mengaktifkannya. Jadi jika Anda membuka tab kueri lain, Anda perlu mengubahnya DI lagi untuk jendela kueri itu.