创建唯一索引 - 重复键

时间:2017-02-23 10:30:45

标签: sql-server foreign-keys primary-key

我正在尝试从三个查询创建一个表(通过UNION ALL),我想使用其中一个列作为主键,但是在执行此操作时收到错误消息:

  

“Msg 1505,Level 16,State 1,Line 31 CREATE UNIQUE INDEX   语句终止,因为找到了对象的重复键   名称'dbo.NEWTABLE'和索引名称   'PK__NEWTABLE__B9388D2D25CFA66F'。重复的键值是   (AccountKey)。“

我正在使用AdventureWorksDW2012数据库,密钥在DimAccount中用作主键,在FactFinance中用作外键。

我如何解决这个问题?我必须使用我试图用作主键的列。

2 个答案:

答案 0 :(得分:0)

使用UNION,而不是UNION ALL。如果您有重复项,UNION ALL将包含它们,因此它不保证唯一键。

答案 1 :(得分: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)

因此,只插入了两行,只引发了警告。