违反UNIQUE KEY约束(错误消息:2627)

时间:2018-03-20 13:07:10

标签: sql sql-server sql-insert

我使用sql server,我尝试运行以下查询:

declare @ProductID int
set @ProductID=322

INSERT INTO table_Customer (ProductID,Type,CompanyID) 
SELECT @ProductID,' ',CompanyID 
FROM table_Companies 
WHERE CompanyActive=1

我得到以下错误:

  

Ms 2627,Level 14,State 1,Line 19

     

违反UNIQUE KEY约束'IX_table_Customer'。无法插入   对象'dbo.table_Customer'中的重复键。重复键值   是(322 ,,,,,,)。

查找下表的定义。

> CREATE TABLE [dbo].table_Customer(

> [CustomerID] [int] IDENTITY(1,1) NOT NULL,
> 
> [ProductID] [int] NOT NULL,

> [Type] [nvarchar](5) NULL,
> 
> [CompanyID] [int] NULL,
> 
> [RoleID] [int] NULL,
> 
> 

>  CONSTRAINT [PK_table_Customer] PRIMARY KEY CLUSTERED  (
> 
> [CustomerID] ASC
> 
> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> OFF,
> 
> ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON
> [PRIMARY],
> 
>  CONSTRAINT [IX_table_Customer] UNIQUE NONCLUSTERED  (

>   [ProductID] ASC,
> 
>   [CompID] ASC,
> 
>   [CompManager] ASC
> 
> )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY =
> OFF,
> 
> ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON
> [PRIMARY]
> 
> ) ON [PRIMARY]

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

您可能会在从SELECT返回时插入多个行:

INSERT INTO table_Customer (ProductID,Type,CompanyID)
SELECT @ProductID, ' ', CompanyID
FROM   table_Companies
WHERE  CompanyActive = 1  -- How many rows does this produce...?

请注意,@ProductID在此查询中是一个FIXED值,因此对于所有选中并插入的行,它将是相同的(322)。

您的索引抱怨您无法插入具有相同索引值集的行。所以要么已经存在这些值的记录,要么SELECT产生重复,或者这两者结合起来。

答案 1 :(得分:1)

您使用的查询将重复 @ProductID表中每个活动公司的table_Companies值。

SELECT @ProductID,' ',CompanyID 
FROM table_Companies 
WHERE CompanyActive=1

如果索引仅包含ProductID列,或者至少包含CompanyID字段,则会导致重复的ProductID条目。

答案 2 :(得分:0)

说客户表中已经有 322 的唯一键

<select class="selectpicker">
    @foreach (var county in ViewBag.ListofCounty)
    {
        <option value="@county.CountyId">@county.CountyName</option>
    }
</select>

答案 3 :(得分:0)

ProductID可能是身份。如果它真的是必须的。将其取下并在完成后将其添加回来。但显然你已经拥有了id 322的数据