2017-02-23 131 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) 

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