tSQL Server-在列中插入多个值



我正在尝试更新我的披萨,这样它将允许多个浇头。尝试向列添加多个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
);

您正试图将一个数组存储到一个看起来像数字列的列中。

通常情况下,每个浇头都会有一排:

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添加一行以上

每个披萨都必须是独一无二的。。。。。试试这个:

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

不要忘记先删除限制

为什么这个聚集索引的命名像外键约束?

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

它必须是独一无二的吗?你的意思不是说这只是一个FK而不是一个索引吗?

你的唯一密钥不应该是PizzaToppingID吗?

您允许插入身份信息吗?或者你不应该让它成为一个自动递增的ID,只插入PizzaID和ToppingID吗?

此外,该表中是否已经存在PizzaID=3的记录?如果你只想维持或升级,那么合并不应该更好吗?

如果这是披萨和浇头之间的连接表,以显示哪些浇头可以放在哪个披萨上,它不应该有2个FK和1个唯一索引吗?

最新更新