Pokud se vám nepodařilo vložit nový záznam do tabulky kvůli jedinečnému omezení, nezapomeňte si přečíst tento článek. Pomůže vám tento problém vyřešit.
V tomto článku představíme 4 způsoby, jak vyřešit problém, když se vám nepodaří vložit nový záznam, protože to porušuje jedinečné omezení tabulky v SQL Server.
Skutečný případ:
Nyní se podívejme na skutečný případ. Máme databázi s názvem „Produkt“ a je zde tabulka s názvem „DataNumenProdukt“ v databázi. V tabulce jsou dvě pole, tj. „ProductId“ a „ProductName“, s datovými typy „int“ a „varchar“. A „ProductId“ je primární klíč s jedinečným omezením.
V současné době jsou v tabulce některé záznamy, jak je uvedeno níže:
Obrázek 1 Záznamy v tabulce “DataNumenProdukt"
Za předpokladu, že pro databázi existují dva správci databází, tj. Jim a Tom. Jednoho dne Jim smazal první záznam v tabulce, jak je uvedeno níže:
DELETE FROM DataNumenProduct WHERE ProductId=1;
Druhý den Tom vložil do tabulky nový záznam, který má stejný primární klíč jako smazaný záznam, jak je uvedeno níže:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Naše tabulka má tedy následující záznamy, jak je uvedeno níže:
Obrázek 2 Aktualizované záznamy v tabulce “DataNumenProdukty"
Nyní, pokud chce Jim obnovit smazaný záznam zpět do tabulky, poruší to jedinečné omezení primárního klíče „ProductId“. V takovém případě můžeme k vyřešení problému použít jedno z níže uvedených řešení.
Řešení 1: Upravte primární klíč nového záznamu, abyste zabránili konfliktu
Primární klíč záznamu, který má být vložen, můžeme upravit na novou hodnotu, která se liší od hodnot všech existujících záznamů v tabulce. Vezměte si výše uvedený případ jako příklad, pro vložení záznamu můžeme upravit hodnotu primárního klíče z 1 na 5. Poté můžeme obnovit nově vygenerovaný záznam zpět do tabulky, jak je uvedeno níže:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Níže jsou konečné záznamy v tabulce:
Obrázek 3 Konečné záznamy v tabulce “DataNumen Produkty"
Řešení 2: Upravte primární klíč existujícího záznamu, abyste zabránili konfliktu
- Nejprve musíme aktualizovat hodnotu primárního klíče existujícího záznamu, který může způsobit konflikt, jak je uvedeno níže:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Níže jsou aktualizované záznamy v tabulce:
Obrázek 4 Aktualizované záznamy v tabulce “DataNumen Produkty"
- Poté můžeme smazaný záznam obnovit zpět do tabulky, jak je uvedeno níže:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Nyní se podívejme na finální verzi, jak je uvedeno níže:
Obrázek 5 Konečné záznamy v tabulce “DataNumen Produkty"
Řešení 3: Dočasné zakázání jedinečného omezení pomocí SQL
- Abychom problém vyřešili, můžeme dočasně odstranit omezení primárního klíče „pk“ v tabulce, jak je uvedeno níže:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Poté můžeme smazaný záznam přidat zpět do tabulky, jak je uvedeno níže:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nyní se podívejme na záznamy v tabulce:
Obrázek 6 Aktualizované záznamy v tabulce “DataNumen Produkty"
- Protože dva záznamy mají stejné hodnoty primárního klíče, musíme jeden z nich upravit, abychom předešli konfliktu, jak je uvedeno níže:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Nakonec do tabulky přidáme zpět omezení primárního klíče „pk“, jak je uvedeno níže:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Nyní jsou v tabulce některé záznamy, jak je uvedeno níže:
Obrázek 7 Aktualizovaný obsah v tabulce “DataNumen Produkty"
Řešení 4: Dočasně zakažte jedinečné omezení pomocí SQL Server Management Studio:
- Nejprve odstraníme omezení primárního klíče „pk“ v tabulce prostřednictvím GUI, jak je uvedeno níže:
Obrázek 8 Odstraňte omezení primárního klíče „pk“ pomocí GUI
- Poté vložíme smazaný záznam v reálném případě do tabulky, jak je uvedeno níže.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Nyní jsou v tabulce některé záznamy, jak je uvedeno níže:
Obrázek 9 Aktualizovaný obsah v tabulce “DataNumen Produkty"
- Poté upravíme hodnotu primárního klíče existujícího záznamu v tabulce, jak je uvedeno níže:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Nakonec přidáme zpět omezení primárního klíče „pk“ do tabulky prostřednictvím GUI, jak je uvedeno níže:
Obrázek 8 Přidat zpět omezení primárního klíče „pk“ přes GUI
Vyřešit SQL Server Poškození databáze
Kromě jedinečných omezení, SQL Server korupce je také velmi častým problémem obtěžujícím DBA. Normálně můžeme použít SQL Server vestavěné příkazy pro řešení korupcí. Pokud však nefungují, můžeme se uchýlit k nějaké třetí straně SQL Server nástroje pro obnovu dat.
Úvod autora:
Jim Hu je odborníkem na obnovu dat DataNumen, Inc., která je světovým lídrem v oblasti technologií pro obnovu dat, včetně Přístup k opravě a dbf opravy softwarových produktů. Pro více informací navštivte www.datanumen.com








