4 обхідні шляхи, коли унікальне обмеження заважає вставити новий запис у SQL Server

Поділитися зараз:

Якщо вам не вдалося вставити новий запис у таблицю через унікальне обмеження, не пропустіть прочитати цю статтю. Це допоможе вам вирішити цю проблему.

У цій статті ми представимо 4 методи для вирішення проблеми, коли вам не вдається вставити новий запис, оскільки він порушує унікальне обмеження таблиці в SQL Server.

Реальна справа:

А тепер давайте розглянемо реальний випадок. У нас є база даних з назвою “Продукт”, і є таблиця “DataNumenТовар »у базі даних. У таблиці є два поля, тобто “ProductId” та “ProductName”, із типами даних “int” та “varchar” відповідно. А “ProductId” - це первинний ключ із унікальним обмеженням.

Наразі в таблиці є деякі записи, як показано нижче:Записи в таблиці “DataNumenПродукт "

Рисунок 1 Записи в таблиці “DataNumenПродукт "

Якщо припустити, що для бази даних існують дві бази даних, тобто Джим і Том. Одного разу Джим видалив перший запис у таблиці, як показано нижче:

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” у таблиці через графічний інтерфейс, як показано нижче:

Видаліть обмеження первинного ключа “pk” через графічний інтерфейс

Рисунок 8 Видалення обмеження первинного ключа “pk” через графічний інтерфейс

  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” до таблиці через графічний інтерфейс, як показано нижче:Додайте назад обмеження первинного ключа “pk” через графічний інтерфейс

Рисунок 8 Додайте назад обмеження первинного ключа “pk” через графічний інтерфейс

Вирішити SQL Server Пошкодження бази даних

Окрім унікальних обмежень, SQL Server корупція також є дуже поширеною проблемою, яка дратує ДБА. Зазвичай ми можемо використовувати SQL Server вбудовані команди для усунення корупції. Однак, якщо вони не працюють, тоді ми можемо вдатися до якоїсь третьої сторони SQL Server засоби відновлення даних.

Вступ автора:

Джим Ху - експерт з відновлення даних у DataNumen, Inc., яка є світовим лідером у галузі технологій відновлення даних, в тому числі Ремонт доступу та dbf ремонт програмних продуктів. Для отримання додаткової інформації відвідайте WWW.datanumen.com

Поділитися зараз:

Коментарі закриті.