Bagaimana Memperbaiki Kesalahan 'Tidak dapat memasukkan nilai eksplisit untuk lajur identiti dalam jadual apabila IDENTITY_INSERT diset ke OFF'?

Lajur kunci utama sering ditetapkan untuk kenaikan automatik semasa membina pangkalan data SQL Server. Had IDENTITI ditetapkan untuk lajur kunci utama untuk melakukan ini. Lokasi permulaan dan langkah kenaikan dipindahkan ke ruangan IDENTITI sebagai parameter. Kemudian setiap kali catatan baru ditambahkan, dan sisipan identiti ditetapkan ke OFF, nilai lajur IDENTITI akan dinaikkan dengan langkah yang ditentukan sebelumnya biasanya nombor. Lebih-lebih lagi, sifat IDENTITAS INSERT ditetapkan kepada AKTIF hanya untuk satu jadual dalam satu sesi.

Dalam artikel ini, kita akan membincangkan kesalahan “Tidak dapat memasukkan nilai eksplisit untuk lajur identiti dalam jadual

apabila IDENTITY_INSERT ditetapkan ke MATI ”

Kesalahan timbul apabila pengguna telah menetapkan "identiti_sisipkan" ke "MATI". Kemudian cuba memasukkan data ke dalam lajur kunci utama jadual secara eksplisit. Ini dapat dijelaskan dengan menggunakan contoh di bawah.

Pangkalan data dan pembuatan jadual:

Pertama, buat pangkalan data bernama "appuals".

Buat jadual bernama "orang" menggunakan kod berikut. Meja yang dibina menggunakan  "IDENTITI UTAMA PRIMARY"

BUAT JADUAL orang (ID INT IDENTITY (1, 1), first_name VARCHAR (MAX), last_name VARCHAR (MAX))

Sintaks untuk menetapkan “Identity_insert off | dihidupkan ”:

The "identity_insert set off | on ” akan membantu kami menyelesaikan ralat ini. Sintaks yang betul untuk pernyataan ini adalah seperti di bawah.

SET IDENTITY_INSERT. .
seperti yang ditunjukkan di bawah.

Manakala argumen pertama adalah nama pangkalan data di mana jadual berada. Argumen kedua menunjukkan adalah skema yang dimiliki oleh jadual tersebut yang nilai identitinya harus ditetapkan ke ON atau OFF . Hujah ketiga

HIDUP

Terdapat asasnya dua cara memasukkan data ke dalam jadual tanpa ralat. Ini dianggap sebagai penyelesaian untuk ralat ini dan dibincangkan di bawah.

Ralat 1: Tetapkan OFF_pengenalan

Dalam kes pertama, kami akan memasukkan data ke dalam jadual dengan "IDENTITY INSERT" diatur ke "OFF" . Oleh itu, jika ID tersebut terdapat dalam pernyataan INSERT, anda akan mendapat ralat "Tidak dapat memasukkan nilai eksplisit untuk lajur identiti dalam jadual 'orang' apabila IDENTITY_INSERT ditetapkan ke MATI".

Laksanakan kod berikut di tab pertanyaan.

tetapkan identiti_sisipkan orang; masukkan ke dalam nilai orang (ID, nama pertama, nama belakang) (3, 'Sadia', 'Majeed'), (4, 'Michel', 'Ronald')

Hasilnya akan seperti ini.

Penyelesaian:

Semasa mematikan  "IDENTITY INSERT OFF""ID KUNCI PERDANA"  TIDAK DAPAT DILAMPIRKAN ke dalam penyisipan penyisipan

Sekarang jalankan kod berikut di tab pertanyaan

tetapkan identiti_sisipkan orang; masukkan ke dalam nilai orang (nama pertama, nama belakang) ('Sadia', 'Majeed'), ('Michel', 'Ronald')

Ini akan memasukkan data ke dalam jadual tanpa ralat. Selain itu, ID KUNCI PERDANA tidak perlu dimasukkan oleh pengguna, malah akan menambahkan nilai ID unik secara automatik seperti yang terlihat pada gambar di bawah.

Ralat 2: Tetapkan identiti_ masukkan

Dalam kes kedua, kami akan memasukkan data ke dalam tabel dengan "IDENTITY INSERT" diset ke "ON" . Oleh itu, jika ID tidak terdapat dalam penyataan INSERT, anda akan mendapat ralat ”Msg 545, Level 16, State 1, Line 17. Nilai eksplisit mesti dinyatakan untuk lajur identiti dalam jadual 'orang' sama ada ketika IDENTITY_INSERT ditetapkan ke AKTIF atau ketika pengguna replikasi memasukkan ke dalam ruangan identiti NOT FOR REPLICATION ”.

Penyelesaian:

Semasa menghidupkan  "IDENTITY INSERT ON" , "PRIMARY KEY  ID" mesti ada dalam penyisipan penyisipan.

Laksanakan kod berikut di tab pertanyaan

tetapkan identiti_sisipkan orang; masukkan ke dalam nilai orang (ID, nama pertama, nama belakang) (5, 'Jack', 'black'), (6, 'john', 'Wicky')

Ini akan memasukkan data ke dalam jadual tanpa ralat. Oleh itu, ID KUNCI PERDANA secara eksplisit diperlukan untuk dimasukkan oleh pengguna. Juga, ia tidak akan menambahkan nilai ID unik secara automatik seperti yang ditunjukkan pada gambar di bawah.

Sekiranya anda " SET IDENTITY INSERT ON" , ia akan kekal untuk keseluruhan sesi. Oleh itu, anda boleh menambah seberapa banyak rekod yang anda mahukan setelah ini ditetapkan. Ini juga merujuk hanya pada sesi di mana ia diaktifkan. Jadi, jika anda membuka tab pertanyaan lain yang anda perlu mengubahnya ON lagi untuk tetingkap pertanyaan.





adalah jadual dengan lajur identiti. #####