Якщо вам не вдалося вставити новий запис у таблицю через унікальне обмеження, не пропустіть прочитати цю статтю. Це допоможе вам вирішити цю проблему.
У цій статті ми представимо 4 методи для вирішення проблеми, коли вам не вдається вставити новий запис, оскільки він порушує унікальне обмеження таблиці в SQL Server.
Реальна справа:
А тепер давайте розглянемо реальний випадок. У нас є база даних з назвою “Продукт”, і є таблиця “DataNumenТовар »у базі даних. У таблиці є два поля, тобто “ProductId” та “ProductName”, із типами даних “int” та “varchar” відповідно. А “ProductId” - це первинний ключ із унікальним обмеженням.
Наразі в таблиці є деякі записи, як показано нижче:
Рисунок 1 Записи в таблиці “DataNumenПродукт "
Якщо припустити, що для бази даних існують дві бази даних, тобто Джим і Том. Одного разу Джим видалив перший запис у таблиці, як показано нижче:
DELETE FROM DataNumenProduct WHERE ProductId=1;
На другий день Том вставив у таблицю новий запис, який має той самий первинний ключ, що і видалений запис, як показано нижче:
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
Отже, наша таблиця має наступні записи, як показано нижче:
Рисунок 2 Оновлені записи в таблиці “DataNumenПродукція "
Тепер, якщо Джим хоче відновити видалений запис назад до таблиці, це порушить унікальне обмеження первинного ключа “ProductId”. У такому випадку ми можемо скористатися одним із наведених нижче обхідних шляхів вирішення проблеми.
Вирішення 1: Змініть первинний ключ нового запису, щоб запобігти конфлікту
Ми можемо змінити первинний ключ запису, який потрібно вставити, до нового значення, яке відрізняється від значень усіх існуючих записів у таблиці. Візьмемо наведений вище випадок як приклад, для того, щоб запис був вставлений, ми можемо змінити значення первинного ключа від 1 до 5. Потім ми можемо відновити новий створений запис назад до таблиці, як показано нижче:
INSERT INTO DataNumenProduct VALUES(5, 'DataNumen Access Repair');
Нижче наведені остаточні записи в таблиці:
Рисунок 3 Підсумкові записи в таблиці “DataNumen Продукція "
Вирішення 2: Змініть первинний ключ існуючого запису, щоб запобігти конфлікту
- По-перше, нам потрібно оновити значення первинного ключа існуючого запису, що може спричинити конфлікт, як показано нижче:
UPDATE DataNumenProduct SET ProductId = 6 WHERE ProductId = 1;
Нижче наведені оновлені записи в таблиці:
Рисунок 4 Оновлені записи в таблиці “DataNumen Продукція "
- Потім ми можемо відновити видалений запис назад до таблиці, як показано нижче:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair ');
Тепер давайте подивимось остаточну версію, як показано нижче:
Рисунок 5 Підсумкові записи в таблиці “DataNumen Продукція "
Тимчасове рішення 3: Тимчасово вимкніть унікальне обмеження за допомогою SQL
- Щоб вирішити проблему, ми можемо тимчасово видалити обмеження первинного ключа «pk» у таблиці, як показано нижче:
ALTER TABLE DataNumenProduct DROP CONSTRAINT pk;
- Тоді ми можемо повернути видалений запис до таблиці, як показано нижче:
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Тепер подивимося записи в таблиці:
Рисунок 6 Оновлені записи в таблиці “DataNumen Продукція "
- Тоді, оскільки два записи мають однакові значення первинного ключа, нам потрібно змінити один із них, щоб запобігти конфлікту, як показано нижче:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Нарешті, ми додаємо назад обмеження первинного ключа “pk” до таблиці, як показано нижче:
ALTER TABLE DataNumenProduct ADD CONSTRAINT pk PRIMARY KEY(ProductId);
Зараз у таблиці є кілька записів, як показано нижче:
Рисунок 7 Оновлений вміст у таблиці “DataNumen Продукція "
Спосіб вирішення 4: Тимчасово вимкніть унікальне обмеження за допомогою SQL Server Студія управління:
- По-перше, ми видаляємо обмеження первинного ключа “pk” у таблиці через графічний інтерфейс, як показано нижче:
Рисунок 8 Видалення обмеження первинного ключа “pk” через графічний інтерфейс
- Потім ми вставляємо видалений запис у реальному випадку в таблицю, як показано нижче.
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
Зараз у таблиці є кілька записів, як показано нижче:
Рисунок 9 Оновлений вміст у таблиці “DataNumen Продукція "
- Потім ми модифікуємо значення первинного ключа існуючого запису в таблиці, як показано нижче:
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- Нарешті, ми додаємо назад обмеження первинного ключа “pk” до таблиці через графічний інтерфейс, як показано нижче:
Рисунок 8 Додайте назад обмеження первинного ключа “pk” через графічний інтерфейс
Вирішити SQL Server Пошкодження бази даних
Окрім унікальних обмежень, SQL Server корупція також є дуже поширеною проблемою, яка дратує ДБА. Зазвичай ми можемо використовувати SQL Server вбудовані команди для усунення корупції. Однак, якщо вони не працюють, тоді ми можемо вдатися до якоїсь третьої сторони SQL Server засоби відновлення даних.
Вступ автора:
Джим Ху - експерт з відновлення даних у DataNumen, Inc., яка є світовим лідером у галузі технологій відновлення даних, в тому числі Ремонт доступу та dbf ремонт програмних продуктів. Для отримання додаткової інформації відвідайте WWW.datanumen.com








