Benzersiz kısıtlama nedeniyle bir tabloya yeni bir kayıt ekleyemediyseniz, bu makaleyi okumayı unutmayın. Bu sorunu çözmenize yardımcı olacaktır.
Bu yazıda, tablonun benzersiz kısıtlamasını ihlal ettiği için yeni bir kayıt ekleyemediğinizde sorunu çözmek için 4 yöntemi tanıtacağız. SQL Server.
Gerçek Bir Vaka:
Şimdi gerçek bir vaka görelim. “Product” adında bir veri tabanımız var ve “Product” adında bir tablomuz var.DataNumenÜrün” veritabanında. Tabloda sırasıyla "int" ve "varchar" veri türlerine sahip "ProductId" ve "ProductName" olmak üzere iki alan vardır. Ve "ProductId", benzersiz kısıtlamaya sahip bir birincil anahtardır.
Şu anda tabloda aşağıdaki gibi bazı kayıtlar var:
Şekil 1 Tablodaki Kayıtlar “DataNumenÜrün"
Veritabanı için Jim ve Tom gibi iki DBA olduğunu varsayarsak. Jim bir gün tablodaki ilk kaydı aşağıdaki gibi sildi:
DELETE FROM DataNumenProduct WHERE ProductId=1;
İkinci gün Tom, silinen kayıtla aynı birincil anahtara sahip tabloya aşağıdaki gibi yeni bir kayıt ekledi:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Yani tablomuz aşağıdaki gibi aşağıdaki kayıtlara sahiptir:
Şekil 2 “Tablodaki Güncellenmiş Kayıtlar”DataNumenÜrün:% s"
Jim, silinen kaydı tabloya geri yüklemek isterse, birincil anahtarın "ProductId" benzersiz kısıtlamasını ihlal edecektir. Böyle bir durumda, sorunu çözmek için aşağıdaki geçici çözümlerden birini kullanabiliriz.
Geçici Çözüm 1: Çakışmayı Önlemek için Yeni Kaydın Birincil Anahtarını Değiştirin
Eklenecek kaydın birincil anahtarını, tablodaki mevcut tüm kayıtlardan farklı yeni bir değerle değiştirebiliriz. Yukarıdaki durumu örnek olarak ele alalım, eklenecek kayıt için birincil anahtar değerini 1'den 5'e değiştirebiliriz. Ardından, yeni oluşturulan kaydı aşağıdaki gibi tabloya geri yükleyebiliriz:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Tablodaki son kayıtlar aşağıdadır:
Şekil 3 “Tablodaki Nihai Kayıtlar”DataNumen Ürün:% s"
Geçici Çözüm 2: Çakışmayı Önlemek için Mevcut Kaydın Birincil Anahtarını Değiştirin
- Öncelikle mevcut kaydın çakışmaya neden olabilecek birincil anahtar değerini aşağıdaki gibi güncellememiz gerekiyor:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Tablodaki güncellenmiş kayıtlar aşağıdadır:
Şekil 4 “Tablodaki Güncellenmiş Kayıtlar”DataNumen Ürün:% s"
- Ardından, silinen kaydı aşağıdaki gibi tabloya geri yükleyebiliriz:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Şimdi aşağıdaki gibi son halini görelim:
Şekil 5 “Tablodaki Nihai Kayıtlar”DataNumen Ürün:% s"
Geçici Çözüm 3: Benzersiz Kısıtlama Temposunu Devre Dışı Bırakınrarily SQL üzerinden
- Problemi çözmek için tempo tablosundaki birincil anahtar kısıtlaması olan “pk”yi silebiliriz.raryani, aşağıdaki gibi:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Ardından, silinen kaydı aşağıdaki gibi tabloya geri ekleyebiliriz:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Şimdi tablodaki kayıtları görelim:
Şekil 6 “Tablodaki Güncellenmiş Kayıtlar”DataNumen Ürün:% s"
- Ardından, iki kayıt aynı birincil anahtar değerlerine sahip olduğundan, çakışmayı önlemek için aşağıdaki gibi bunlardan birini değiştirmemiz gerekir:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Son olarak, "pk" birincil anahtar kısıtlamasını aşağıdaki gibi tabloya geri ekliyoruz:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Şimdi tabloda aşağıdaki gibi bazı kayıtlar var:
Şekil 7 “ Tablodaki Güncellenmiş İçerikDataNumen Ürün:% s"
Geçici Çözüm 4: Benzersiz Kısıtlama Temposunu Devre Dışı Bırakınrararacılığıyla SQL Server Yönetim Stüdyosu:
- İlk olarak tablodaki birincil anahtar kısıtlaması olan “pk”yi GUI aracılığıyla aşağıdaki gibi siliyoruz:
Şekil 8 Birincil Anahtar Kısıtlaması “pk”yi GUI aracılığıyla silin
- Daha sonra gerçek durumda silinen kaydı aşağıdaki gibi tabloya ekliyoruz.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Şimdi tabloda aşağıdaki gibi bazı kayıtlar var:
Şekil 9 “ Tablodaki Güncellenmiş İçerikDataNumen Ürün:% s"
- Ardından, tablodaki mevcut kaydın birincil anahtar değerini aşağıdaki gibi değiştiririz:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Son olarak, birincil anahtar kısıtlaması olan "pk"yi GUI aracılığıyla aşağıdaki gibi tabloya geri ekliyoruz:
Şekil 8 GUI aracılığıyla Birincil Anahtar Kısıtlaması “pk”yi Geri Ekleyin
Çözmek SQL Server Veritabanı Bozulması
Benzersiz kısıtlamalar dışında, SQL Server rüşvet DBA'ları rahatsız eden çok yaygın bir sorundur. Normalde kullanabiliriz SQL Server bozulmaları çözmek için yerleşik komutlar. Ancak, işe yaramazlarsa, bazı üçüncü taraflara başvurabiliriz. SQL Server veri kurtarma araçları.
Yazar Tanıtımı:
Jim Hu, bir veri kurtarma uzmanıdır. DataNumendahil olmak üzere veri kurtarma teknolojilerinde dünya lideri olan , Inc. Erişim onarımı ve dbf onarım yazılım ürünleri. Daha fazla bilgi için ziyaret edin www.datanumen.com









