Sql server 创建唯一索引-重复键

Sql server 创建唯一索引-重复键,sql-server,foreign-keys,primary-key,Sql Server,Foreign Keys,Primary Key,我试图从三个查询(通过UNION ALL)创建一个表,我想使用其中一列作为主键,但执行此操作时收到一条错误消息: “Msg 1505,16级,状态1,第31行,创建唯一索引 语句终止,因为找到了该对象的重复键 名称“dbo.NEWTABLE”和索引名称 “PK__NEWTABLE__B9388D2D25CFA66F”。重复的键值为 (帐户键)。” 我使用的是AdventureWorksDW2012数据库,该密钥在DimAccount中用作主键,在FactFinance中用作外键 我该怎么做?我必

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

“Msg 1505,16级,状态1,第31行,创建唯一索引 语句终止,因为找到了该对象的重复键 名称“dbo.NEWTABLE”和索引名称 “PK__NEWTABLE__B9388D2D25CFA66F”。重复的键值为 (帐户键)。”

我使用的是AdventureWorksDW2012数据库,该密钥在DimAccount中用作主键,在FactFinance中用作外键


我该怎么做?我必须使用我试图用作主键的列。

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

您可以使用
忽略重复键
选项创建唯一索引。它所做的是,如果遇到重复的键,它将丢弃有问题的行,而不会引发错误

检查此示例:

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)
因此,只插入了两行,只发出了一条警告。

您所说的“从三个查询创建一个表”是什么意思?您是在创建一个新表并从查询中填充它吗?或者您正在创建这些表的视图?