SQL Server-将多个值插入列

时间:2018-11-20 15:41:20

标签: sql tsql sql-update

我正在尝试更新我的披萨,因此将允许多​​个浇头。尝试向列添加多个toppingID时收到错误Cannot insert duplicate key row in object 'dbo.PizzaToppings' with unique index 'FK_Pizza'. The duplicate key value is (3).。如何添加多个ToppingID?

INSERT INTO dbo.PizzaToppings
(PizzaToppingsID, PizzaID, ToppingsID)
VALUES 
   (1, 1, 1),
   (2, 2, 2),
   (3, 3, 3),
   (4, 4, 7),
   (5, 5, 6),
   (6, 6, 4),
   (7, 3, 7);

创建的FK_Pizza

CREATE UNIQUE NONCLUSTERED INDEX
FK_Pizza
ON PizzaToppings
(
PizzaID ASC
);

3 个答案:

答案 0 :(得分:2)

您正在尝试将数组存储在看起来像数字列的位置。

通常,每个单独的浇头都会有一行:

Pizzas:
PizzaID     integer
PizzaName   varchar(32)

Toppings:
ToppingID   integer
ToppingName varchar(32)

PizzaTopping:
PizzaID     integer (fk to Pizzas.PizzaID)
ToppingID   integer (fk to Toppings.ToppingID)

PizzaTopping将为每个比萨饼的每个浇头包含一行。

编辑更新的问题:

您的错误归结于重复的密钥冲突。检查表上的约束,看来有一个约束阻止您在每个pizzaID

中添加多行

答案 1 :(得分:1)

每个披萨必须是唯一的..... 试试这个:

CREATE UNIQUE NONCLUSTERED INDEX
FK_Pizza
ON PizzaToppings
(
PizzaID ASC, ToppingsID ASC
);

别忘了先删除约束

答案 2 :(得分:0)

为什么这个聚簇索引像外键约束一样被命名?

CREATE UNIQUE NONCLUSTERED INDEX
FK_Pizza
ON PizzaToppings
(
PizzaID ASC
);

它必须唯一吗?您不是说这只是FK而不是指数吗?

您的唯一密钥不是PizzaToppingID吗?

您是否允许插入身份?还是不应该让它成为自动递增的ID,而只插入PizzaID和ToppingID?

此表中是否已经有PizzaID = 3的记录?如果您只想维护或UPSERT,那么合并不是更好吗?

如果这是比萨饼和浇头之间的连接表,以显示允许在哪个比萨饼上浇头,那么它不应该有2个FK和1个唯一索引吗?