"IDENTITY_INSERT OFF olarak ayarlandığında tabloda kimlik sütunu için açık değer eklenemiyor" Hatası Nasıl Onarılır?

Birincil anahtar sütunu, genellikle bir SQL Server veritabanı oluştururken otomatik olarak artacak şekilde ayarlanır. KİMLİK sınırı, birincil anahtar sütununun bunu yapması için ayarlanır. Başlangıç ​​konumu ve artış adımı, parametreler olarak KİMLİK sütununa aktarılır. Daha sonra yeni bir kayıt eklendiğinde ve kimlik girişi KAPALI olarak ayarlandığında, KİMLİK sütununun değeri önceden tanımlanmış adım normalde bir sayı ile artırılır. Ayrıca, IDENTITY INSERT özelliği, tek bir oturumda yalnızca bir tablo için AÇIK olarak ayarlanır.

Bu yazıda hatayı tartışacağız "Tabloda kimlik sütunu için açık değer eklenemez

IDENTITY_INSERT OFF olarak ayarlandığında "
Aşağıda gösterildiği gibi.

Hata, kullanıcı "kimlik_insert" öğesini "KAPALI" olarak ayarladığında ortaya çıkar. Ardından, tablonun birincil anahtar sütununa açıkça veri eklemeye çalışır. Bu, aşağıdaki örnek kullanılarak açıklanabilir.

Veritabanı ve tablo oluşturma:

İlk olarak, "appuals" adlı bir veritabanı oluşturun.

Aşağıdaki kodu kullanarak "kişi" adlı bir tablo oluşturun. Bir kullanarak oluşturulmuş tablo “ANA ANAHTAR KİMLİK”

CREATE TABLE person (ID INT IDENTITY (1, 1), first_name VARCHAR (MAX), last_name VARCHAR (MAX))

"Identity_insert off ayarı için sözdizimi | açık ”:

“Identity_insert'i kapat | üzerinde ” bu hatayı çözmemize yardımcı olacaktır. Bu ifade için doğru sözdizimi aşağıdaki gibidir.

IDENTITY_INSERT AYARLA  . .  {KAPALI | ON}

Oysa ilk argüman tablonun bulunduğu veritabanının adıdır. İkinci argüman şovlar, kimlik değerinin ayarlanması gereken tablonun ait olduğu şemadır. AÇIK veya KAPALI. Üçüncü argüman

kimlik sütununa sahip tablodur.

Tabloya hatasız veri eklemenin temelde iki farklı yolu vardır. Bunlar, bu hatanın çözümü olarak kabul edilir ve aşağıda tartışılmaktadır.

Hata 1: Identity_insert'i KAPALI olarak ayarlayın

İlk durumda, verileri tabloya ekleyeceğiz. "KİMLİK GİRİŞİ" ayarlanır "KAPALI". Öyleyse, INSERT deyiminde kimlik varsa, hatayı alırsınız "IDENTITY_INSERT OFF olarak ayarlandığında" person "tablosundaki kimlik sütunu için açık değer eklenemez".

Sorgu sekmesinde aşağıdaki kodu yürütün.

 Identity_insert kişiyi kapatır; kişi (ID, ad_isim, soyad) değerlerine (3, 'Sadia', 'Majeed'), (4, 'Michel', 'Ronald') ekleyin

Çıktı şöyle olacak.

Çözüm:

Çevirirken "KİMLİK GİRİŞ KAPALI","BİRİNCİL ANAHTAR KİMLİĞİ" İnsert deyiminde MEVCUT OLMAMALIDIR

Şimdi sorgu sekmesinde aşağıdaki kodu yürütün

 Identity_insert kişiyi kapatır; kişi (ad, soyad) değerlerine ('Sadia', 'Majeed'), ('Michel', 'Ronald') ekleyin

Bu, verileri tabloya hatasız ekleyecektir. Ayrıca, PRIMARY KEY ID'nin kullanıcı tarafından girilmesi gerekli değildir, bunun yerine aşağıdaki şekilde görüldüğü gibi otomatik olarak benzersiz bir ID değeri ekleyecektir.

Hata 2: Identity_insert'i AÇIK olarak ayarlayın

İkinci durumda, verileri tabloya ekleyeceğiz. "KİMLİK GİRİŞİ" ayarlanır "AÇIK". Öyleyse, INSERT deyiminde kimlik yoksa, hatayı alırsınız ” Mesaj 545, Seviye 16, Durum 1, Satır 17. IDENTITY_INSERT AÇIK olarak ayarlandığında veya bir çoğaltma kullanıcısı NOT FOR REPLICATION kimlik sütununa eklerken 'person' tablosundaki kimlik sütunu için açık değer belirtilmelidir”.

Çözüm:

dönerken"KİMLİK GİRİŞİ" "BİRİNCİL ANAHTAR İD" insert bildiriminde bulunmalıdır.

Sorgu sekmesinde aşağıdaki kodu yürütün

 Identity_insert kişiyi ayarlayın; kişi (ID, ad_isim, soyad) değerlerine (5, 'Jack', 'black'), (6, 'john', 'Wicky') ekleyin

Bu, verileri tabloya hatasız ekleyecektir. Böylece BİRİNCİL ANAHTAR KİMLİĞİ kullanıcı tarafından eklenmesi açıkça gereklidir. Ayrıca aşağıdaki şekilde görüldüğü gibi otomatik olarak benzersiz kimlik değeri eklemeyecektir.

Eğer sen "KİMLİK AYARLA GİRİN ", tüm oturum boyunca açık kalacaktır. Böylece, ayarlandıktan sonra istediğiniz kadar kayıt ekleyebilirsiniz. Bu aynı zamanda yalnızca etkinleştirildiği oturumu ifade eder. Yani başka bir sorgu sekmesi açarsanız, onu çevirmeniz gerekir. AÇIK yine o sorgu penceresi için.

Facebook Twitter Google Plus Pinterest