我正在尝试从三个查询创建一个表(通过UNION ALL),我想使用其中一个列作为主键,但是在执行此操作时收到错误消息:
“Msg 1505,Level 16,State 1,Line 31 CREATE UNIQUE INDEX 语句终止,因为找到了对象的重复键 名称'dbo.NEWTABLE'和索引名称 'PK__NEWTABLE__B9388D2D25CFA66F'。重复的键值是 (AccountKey)。“
我正在使用AdventureWorksDW2012数据库,密钥在DimAccount中用作主键,在FactFinance中用作外键。
我如何解决这个问题?我必须使用我试图用作主键的列。
答案 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)
因此,只插入了两行,只引发了警告。