一意の制約のためにテーブルに新しいレコードを挿入できなかった場合は、この記事をお読みください。 それはあなたがこの問題を解決するのを助けるでしょう。
この記事では、テーブルの一意の制約に違反しているために新しいレコードを挿入できない場合に問題を解決するための4つの方法を紹介します。 SQL Server.
実際のケース:
それでは、実際のケースを見てみましょう。 「Product」という名前のデータベースがあり、「DataNumenデータベース内の「製品」。 テーブルには「ProductId」と「ProductName」のXNUMXつのフィールドがあり、データ型はそれぞれ「int」と「varchar」です。 また、「ProductId」は一意の制約を持つ主キーです。
現在、以下のように、テーブルにいくつかのレコードがあります。
図1表のレコードDataNumen製品"
データベースにXNUMXつのDBA、つまりジムとトムがあると仮定します。 ある日、ジムは次のようにテーブルの最初のレコードを削除しました。
DELETE FROM DataNumenProduct WHERE ProductId=1;
XNUMX日目に、トムは次のように、削除されたレコードと同じ主キーを持つ新しいレコードをテーブルに挿入しました。
INSERT INTO DataNumenProduct VALUES(1,'DataNumen OutLook Repair');
したがって、テーブルには次のようなレコードがあります。
図2表「の更新されたレコード」DataNumen製品」
ジムが削除されたレコードをテーブルに復元したい場合、主キー「ProductId」の一意性制約に違反します。 このような場合、以下の回避策のXNUMXつを使用して問題を解決できます。
回避策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 製品」
- 次に、XNUMXつのレコードの主キー値が同じであるため、以下のように、競合を防ぐために一方を変更する必要があります。
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 Management Studio:
- まず、以下のように、GUIを介してテーブル内の主キー制約「pk」を削除します。
図8GUIを介して主キー制約「pk」を削除する
- 次に、以下のように、削除されたレコードを実際にテーブルに挿入します。
INSERT INTO DataNumenProduct VALUES(1, 'DataNumen Access Repair');
これで、以下のように、テーブルにいくつかのレコードがあります。
図9表「の更新されたコンテンツDataNumen 製品」
- 次に、以下のように、テーブル内の既存のレコードの主キー値を変更します。
UPDATE DataNumenProduct SET ProductId = 5 WHERE ProductName = 'DataNumen Outlook Repair';
- 最後に、以下のように、GUIを介して主キー制約「pk」をテーブルに追加し直します。
図8GUIを介して主キー制約「pk」を追加し直す
解決する SQL Server データベースの破損
一意の制約以外に、 SQL Server 腐敗 DBAを悩ませる非常に一般的な問題でもあります。 通常は使用できます SQL Server 破損を解決するための組み込みコマンド。 ただし、それらが機能しない場合は、サードパーティに頼ることができます SQL Server データ復旧ツール。
著者紹介:
Jim Huは、のデータ回復の専門家です。 DataNumen、Inc。は、以下を含むデータ復旧技術の世界的リーダーです。 アクセス修復 (NAIST) と dbf ソフトウェア製品を修理します。 詳細については、次のWebサイトをご覧ください。 WWW。datanumen.com








