唯一約束阻止您插入新記錄時的 4 種解決方法 SQL Server

立即分享:

如果由於唯一約束而未能在表中插入新記錄,請不要錯過閱讀本文。 它將幫助您解決這個問題。

在本文中,我們將介紹 4 種方法來解決由於違反表的唯一約束而導致插入新記錄失敗的問題。 SQL Server.

真實案例:

現在讓我們看一個真實的案例。 我們有一個名為“Product”的數據庫,還有一個名為“DataNumen產品”在數據庫中。 表中有兩個字段,即“ProductId”和“ProductName”,數據類型分別為“int”和“varchar”。 “ProductId”是具有唯一約束的主鍵。

目前表中有一些記錄,如下:表中的記錄“DataNumen產品”

圖 1 表中的記錄“DataNumen產品”

假設數據庫有兩個 DBA,即 Jim 和 Tom。 有一天,Jim 刪除了表中的第一條記錄,如下:

DELETE FROM DataNumenProduct
WHERE ProductId=1;

第二天,Tom 向表中插入了一條新記錄,該記錄與刪除的記錄具有相同的主鍵,如下所示:

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

所以我們的表有以下記錄,如下:

更新表中的記錄“DataNumen產品”

圖 2 表“更新記錄”DataNumen產品”

現在,如果 Jim 想要將刪除的記錄恢復回表中,它將違反主鍵“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. 首先,我們通過GUI刪除表中的主鍵約束“pk”,如下:

通過 GUI 刪除主鍵約束“pk”

圖 8 通過 GUI 刪除主鍵約束“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. 最後,我們通過GUI將主鍵約束“pk”添加回表中,如下所示:通過 GUI 添加回主鍵約束“pk”

圖 8 通過 GUI 重新添加主鍵約束“pk”

解決 SQL Server 數據庫損壞

除了唯一約束, SQL Server 腐敗 也是一個很常見的問題,讓 DBA 很煩惱。 通常我們可以使用 SQL Server 解決損壞的內置命令。 但是,如果它們不起作用,那麼我們可以求助於一些第三方 SQL Server 數據恢復工具。

作者簡介:

Jim Hu 是數據恢復專家 DataNumen,Inc.是數據恢復技術的全球領導者,包括 通道維修 以及 dbf 維修軟件產品。 欲了解更多信息,請訪問 萬維網。datanumen.COM

立即分享:

評論被關閉。