我使用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]
有人可以帮助我吗?
答案 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的数据