2017-02-23 161 views
0

我試圖從三個查詢(通過UNION ALL)創建一個表,我想使用其中一個列作爲主鍵,但這樣做時我收到一條錯誤消息:創建唯一的索引 - 重複鍵

「消息1505,級別16,狀態1,行31 CREATE終止UNIQUE INDEX 語句,因爲重複的鍵被發現的對象 名 'dbo.NEWTABLE' 和索引名 'PK__NEWTABLE__B9388D2D25CFA66F'。該重複鍵值爲 (AccountKey)。「

我正在使用AdventureWorksDW2012數據庫,並且該鍵用作DimAccount中的主鍵和FactFinance中的外鍵。

我該如何解決這個問題?我必須使用我試圖用作主鍵的列。

+0

你是什麼意思「從三個查詢創建一個表」 - 你是否在創建一個新表並填充查詢?或者你是否創建了這些表的視圖? – BeanFrog

回答

0

使用UNION,而不是UNION ALL。如果你有重複,UNION ALL會包含它們,所以它不能保證唯一的密鑰。

0

您可以使用IGNORE_DUP_KEY選項創建唯一索引。它所做的是,如果遇到重複密鑰,它將丟棄相關行而不會引發錯誤。

入住此示例:

create table #t (i int not null); 

create unique index UQ on #t(i) with ignore_dup_key; 

insert #t values (1),(1),(2),(2); 

觀察消息:

Duplicate key was ignored. 

(2 row(s) affected) 

所以,只有兩行被插入,只有警告提高。