Saya memiliki kesalahan di bawah ini ketika saya menjalankan skrip berikut. Apa kesalahannya, dan bagaimana cara mengatasinya?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Kesalahan:
Server: Msg 544, Level 16, State 1, Line 1
Tidak dapat memasukkan nilai eksplisit untuk kolom identitas dalam tabel 'tabel' ketika IDENTITY_INSERT diatur ke OFF.
sql
sql-server
sybase
martin clayton
sumber
sumber
Jawaban:
Anda memasukkan nilai untuk
OperationId
itu adalah kolom identitas.Anda dapat mengaktifkan sisipan identitas pada tabel seperti ini sehingga Anda dapat menentukan nilai identitas Anda sendiri.
sumber
jangan berikan nilai pada OperationID karena akan dihasilkan secara otomatis. coba ini:
sumber
ini hanya berfungsi satu tabel databse misalnya Jika nama tabel adalah siswa maka kueri terlihat seperti ini
SET IDENTITY_INSERT student ON
sumber
Berhati-hatilah dalam menetapkan IDENTITY_INSERT ke ON. Ini adalah praktik yang buruk kecuali jika database dalam mode pemeliharaan dan diatur ke satu pengguna. Ini tidak hanya memengaruhi penyisipan Anda, tetapi juga orang lain yang mencoba mengakses tabel.
Mengapa Anda mencoba memasukkan nilai ke bidang identitas?
sumber
Pada dasarnya ada 2 cara berbeda untuk menyisipkan catatan tanpa mengalami kesalahan:
1) Ketika IDENTITY_INSERT diatur ke OFF. "ID" KUNCI UTAMA TIDAK HARUS MENJADI PRESENT
2) Ketika IDENTITY_INSERT diatur ON. "ID" KUNCI UTAMA HARUS MENJADI PRESENT
Seperti contoh berikut dari Tabel yang sama yang dibuat dengan KUNCI UTAMA IDENTITAS:
1) Dalam contoh pertama, Anda bisa menyisipkan catatan baru ke dalam tabel tanpa mendapatkan kesalahan saat IDENTITY_INSERT MATI. PRIMARY KEY "ID" TIDAK HARUS PRESENT dari "INSERT INTO" Laporan dan nilai ID yang unik akan ditambahkan secara otomatis: . Jika ID ada dari INSERT dalam kasus ini, Anda akan mendapatkan kesalahan "Tidak dapat memasukkan nilai eksplisit untuk kolom identifikasi dalam tabel ..."
OUTPUT TABEL [dbo]. [Orang] akan:
2) Dalam contoh kedua, Anda bisa menyisipkan catatan baru ke dalam tabel tanpa mendapatkan kesalahan saat IDENTITY_INSERT dalam posisi ON. PRIMARY KEY "ID" HARUS MENJADI PRESENT dari Pernyataan "INSERT INTO" selama nilai ID belum ada : Jika ID TIDAK hadir dari INSERT dalam hal ini, Anda akan mendapatkan kesalahan "Nilai eksplisit harus ditentukan untuk tabel kolom identitas ... "
OUTPUT TABEL [dbo]. [Orang] akan:
sumber
Di entitas Anda untuk tabel itu, tambahkan
DatabaseGenerated
atribut di atas kolom yang sisipan identitasnya ditetapkan:Contoh:
sumber
DatabaseGeneratedOption.Identity
, dan saya masih mendapatkan kesalahan. Ini kesalahan saya sendiri, saya meletakkan ID-pseudo di baris baru untuk membedakan mereka satu sama lain di halaman web saya, dan saya harap hanya membatalkan mereka sebeluminsert
cukup.Anda cukup menggunakan pernyataan ini misalnya jika nama tabel Anda adalah Sekolah . Sebelum penyisipan, pastikan identity_insert diatur ke AKTIF dan setelah memasukkan kueri, giliran identity_insert OFF
sumber
Jika Anda menggunakan liquibase untuk memperbarui SQL Server Anda, Anda kemungkinan mencoba memasukkan kunci rekaman ke dalam bidang AutoIncrement. Dengan menghapus kolom dari sisipan, skrip Anda harus dijalankan.
sumber
Ada OperationId yang disebutkan sebelumnya dalam kueri Anda yang seharusnya tidak ada di sana karena secara otomatis ditingkatkan
jadi permintaan Anda akan
sumber
Situasi lain adalah untuk memeriksa bahwa Kunci Utama adalah nama yang sama dengan kelas Anda di mana satu-satunya perbedaan adalah bahwa kunci utama Anda memiliki 'ID' yang ditambahkan atau menentukan [Kunci] pada kunci primer yang tidak terkait dengan bagaimana kelas diberi nama.
sumber
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
di kolom PrimaryKey Anda dan pastikan set ke int tipe data . Jika kolom adalah kunci utama dan disetel ke IsIDentity menjadi true dalam SQL, maka tidak perlu untuk baris kode ini[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
sumber
Solusi terbaik adalah dengan menggunakan anotasi
GeneratedValue(strategy = ...)
, yaitudikatakan, bahwa kolom ini dihasilkan oleh database menggunakan strategi IDENTITY dan Anda tidak perlu mengurusnya - database akan melakukannya.
sumber
Jika Anda mengalami masalah ini saat menggunakan sql-server dengan skrip sekuens-npm pastikan untuk menambahkan
@AutoIncrement
ke kolom ID:sumber
Dan jika Anda menggunakan Oracle SQL Developer untuk terhubung, ingatlah untuk menambahkan / sqldev: stmt /
/ sqldev: stmt / set identity_insert TABEL aktif;
sumber
Saya tidak yakin apa gunanya "Sisipkan Tabel", tetapi jika Anda hanya mencoba memasukkan beberapa nilai coba:
Saya memiliki pesan kesalahan yang sama muncul, tetapi saya pikir ini harus berhasil. ID akan otomatis bertambah secara otomatis selama itu adalah kunci utama.
sumber
Saya memecahkan masalah ini dengan membuat objek baru setiap kali saya ingin menambahkan apa pun ke database.
sumber
Perhatikan bahwa jika Anda menutup setiap baris dengan
;
,SET IDENTITY_INSERT mytable ON
perintah tidak akan berlaku untuk baris berikut.yaitu
permintaan seperti
Memberi kesalahan
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Tetapi kueri seperti ini akan berfungsi:
Sepertinya
SET IDENTITY_INSERT
perintah hanya berlaku untuk transaksi, dan;
akan menandakan akhir transaksi.sumber
Masalah yang timbul dari menggunakan DBContext atau DBSet yang tidak diketik jika Anda menggunakan Interface dan mengimplementasikan metode savechanges dengan cara yang umum
Jika ini adalah kasus Anda, saya mengusulkan untuk mengetik DBContex kuat misalnya
maka
.Savechanges
akan bekerjasumber
Cukup hapus tabel yang diseret ke dalam file .dbml Anda dan seret kembali. Kemudian Bersihkan solusi> Rebuild solution> Build solution.
Itulah yang berhasil untuk saya.
Saya tidak membuat tabel sendiri, saya menggunakan VS dan SSMS, saya mengikuti tautan ini untuk ASP.NET Identity: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ menambahkan-aspnet-identity-to-an-blank-or-existing-web-bentuk-proyek
sumber