4 заобиколни решения, когато уникално ограничение ви пречи да вмъкнете нов запис в SQL Server

Споделете сега:

Ако не сте успели да вмъкнете нов запис в таблица поради уникалното ограничение, не пропускайте да прочетете тази статия. Това ще ви помогне да разрешите този проблем.

В тази статия ще представим 4 метода за решаване на проблема, когато не успеете да вмъкнете нов запис, защото нарушава уникалното ограничение на таблицата в SQL Server.

Истински случай:

Сега да видим истински случай. Имаме база данни с име „Продукт“ и има таблица, наречена „DataNumenПродукт ”в базата данни. В таблицата има две полета, т.е. „ProductId“ и „ProductName“, с типове данни съответно „int“ и „varchar“. И “ProductId” е първичен ключ с уникални ограничения.

В момента в таблицата има някои записи, както по-долу:Записи в таблица “DataNumenПродукт ”

Фигура 1 Записи в таблица „DataNumenПродукт ”

Ако приемем, че има две DBA за базата данни, т.е. Джим и Том. Един ден Джим изтри първия запис в таблицата, както е показано по-долу:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

На втория ден Том вмъкна нов запис в таблицата, който има същия първичен ключ с изтрития запис, както по-долу:

INSERT INTO DataNumenProduct
VALUES(1,'DataNumen OutLook Repair');

Така че нашата таблица има следните записи, както по-долу:

Актуализирани записи в таблица “DataNumenПродукти ”

Фигура 2 Актуализирани записи в таблица “DataNumenПродукти ”

Сега, ако Джим иска да възстанови изтрития запис обратно в таблицата, това ще наруши уникалното ограничение на първичния ключ “ProductId”. В такъв случай можем да използваме едно от заобикалящите решения по-долу, за да разрешим проблема.

Заобиколно решение 1: Променете първичния ключ на новия запис, за да предотвратите конфликт

Можем да модифицираме първичния ключ на записа, за да бъде вмъкнат, към нова стойност, която е различна от тази на всички съществуващи записи в таблицата. Вземете горния случай като пример, за да бъде вмъкнат записът, можем да модифицираме стойността на първичния ключ от 1 до 5. След това можем да възстановим новия генериран запис обратно в таблицата, както е показано по-долу:

INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');

По-долу са финалните записи в таблицата:Финални записи в таблицата “DataNumen Продукти ”

Фигура 3 Окончателни записи в таблицата “DataNumen Продукти ”

Заобиколно решение 2: Променете първичния ключ на съществуващия запис, за да предотвратите конфликт

  1. Първо, трябва да актуализираме стойността на първичния ключ на съществуващия запис, който може да причини конфликт, както е показано по-долу:
UPDATE DataNumenProduct
SET ProductId = 6
WHERE ProductId = 1;

По-долу са актуализираните записи в таблицата:

Актуализирани записи в таблица “DataNumen Продукти ”

Фигура 4 Актуализирани записи в таблица “DataNumen Продукти ”

  1. След това можем да възстановим изтрития запис обратно в таблицата, както е показано по-долу:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair ');

Сега нека видим окончателната версия, както по-долу:

Финални записи в таблица “DataNumen Продукти ”

Фигура 5 Окончателни записи в таблица „DataNumen Продукти ”

Заобиколно решение 3: Временно деактивирайте уникалното ограничение чрез SQL

  1. За да решим проблема, можем временно да изтрием ограничението на първичния ключ „pk“ в таблицата, както е показано по-долу:
ALTER TABLE DataNumenProduct
DROP CONSTRAINT pk;
  1. След това можем да добавим обратно изтрития запис към таблицата, както по-долу:
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Сега нека видим записите в таблицата:

Актуализирани записи в таблица “DataNumen Продукти ”

Фигура 6 Актуализирани записи в таблица “DataNumen Продукти ”

  1. Тогава тъй като два записа имат еднакви стойности на първичен ключ, трябва да модифицираме един от тях, за да предотвратим конфликт, както е показано по-долу:
UPDATE DataNumenProduct SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Накрая добавяме обратно ограничението за първичен ключ „pk“ към таблицата, както по-долу:
ALTER TABLE DataNumenProduct
ADD CONSTRAINT pk PRIMARY KEY(ProductId);

Сега има някои записи в таблицата, както по-долу:

Актуализирано съдържание в таблицата “DataNumen Продукти ”

Фигура 7 Актуализирано съдържание в таблицата “DataNumen Продукти ”

Заобиколно решение 4: Временно деактивирайте уникалното ограничение чрез SQL Server Студио за управление:

  1. На първо място, изтриваме ограничението за първичен ключ „pk“ в таблицата чрез GUI, както по-долу:

Изтрийте ограничението за първичен ключ „pk“ чрез GUI

Фигура 8 Изтрийте ограничението за първичен ключ „pk“ чрез GUI

  1. След това вмъкваме изтрития запис в реални случаи в таблицата, както е показано по-долу.
INSERT INTO DataNumenProduct
VALUES(1, 'DataNumen Access Repair');

Сега има някои записи в таблицата, както по-долу:

Актуализирано съдържание в таблица “DataNumen Продукти ”

Фигура 9 Актуализирано съдържание в таблица “DataNumen Продукти ”

  1. След това модифицираме стойността на първичния ключ на съществуващия запис в таблицата, както е показано по-долу:
UPDATE DataNumenProduct
SET ProductId = 5
WHERE ProductName = 'DataNumen Outlook Repair';
  1. Накрая добавяме обратно ограничението на първичния ключ „pk“ към таблицата чрез GUI, както по-долу:Добавете обратно ограничението за първичен ключ „pk“ чрез GUI

Фигура 8 Добавете обратно ограничението за първичен ключ „pk“ чрез GUI

Решете SQL Server Повреда на базата данни

Различни от уникални ограничения, SQL Server корупция също е много често срещан проблем, който дразни DBA. Обикновено можем да използваме SQL Server вградени команди за разрешаване на корупциите. Ако обаче не работят, тогава можем да прибегнем до някаква трета страна SQL Server инструменти за възстановяване на данни.

Въведение на автора:

Джим Ху е експерт по възстановяване на данни в DataNumen, Inc., която е световен лидер в технологиите за възстановяване на данни, включително Достъп до ремонт и dbf ремонт на софтуерни продукти. За повече информация посетете WWW.datanumen.com

Споделете сега:

Коментарите са забранени.