【发布时间】:2015-10-19 11:34:44
【问题描述】:
希望有人可以提供帮助。我创建了两个表 Customer 和 Order 如下;
CREATE TABLE Customer
CustomerID int NOT NULL PRIMARY KEY
CustomerName varchar(25)
客户表中的其他列与我的问题无关,因此我不会在此处包含它们。我的 CustomerID 编号从 1 到 15,都是唯一的。
我创建的第二个表是 Orders 如下
CREATE TABLE Orders
OrderID smallint NOT NULL PRIMARY KEY
OrderDate date NOT NULL
CustomerID int FOREIGN KEY REFERENCES Customer (CustomerID);
我的插入值如下
INSERT INTO Orders (OrderID, OrderDate, CustomerID)
VALUES
(1001, '2008-10-21', 1),
(1002, '2008-10-21', 8),
(1003, '2008-10-22', 15),
(1004, '2008-10-22', 5),
(1005, '2008-10-24', 3),
(1006, '2008-10-24', 2),
(1007, '2008-10-27', 11),
(1008, '2008-10-30', 12),
(1009, '2008-11-05', 4),
(1010, '2008-11-05', 1);
当我尝试将我的值插入 Order 表时,我收到以下错误消息......
消息 547,级别 16,状态 0,第 1 行.....INSERT 语句冲突 具有 FOREIGN KEY 约束“FK__OrderT__Customer__2D27B809”。这 发生冲突表“dbo.Customer”,列“CustomerID”。这 语句已终止。
我的 Order 表中 CustomerID 的数字是(1;1;2;3;4;5;8;11;12 和 15)。因此,我检查了我在 Order 表中的所有 CustomerID 编号也在 Customer 表中。
所以我的问题是
1) 插入值是否失败,因为我在 Customer 表中的 CustomerID 列在 NOT NULL 中并且我错误地将 CustomerID 列在 Order 中设置为 NULL。
2) 如果上述问题的答案是肯定的,那么我是否可以 (a) 在 Order 中的 CustomerID 列上删除外键 (b) 将该列更改为 NOT NULL 并且 (c) 然后添加再次对该列进行外键约束,然后再次插入值?
删除并重新创建表 Order 可能更容易。但我很好奇选项 2 是否可行,重新删除并在同一列上添加外键。
希望我认为错误发生的原因是正确的,感觉 如果我错了,请纠正我。
谢谢大家 乔西
【问题讨论】:
-
什么值插入失败?
-
OrderT 还是 Orders?是错字吗?
-
@Abdul - 该表在 SQL 中称为 OrderT,我只是在这里将其称为 Order,所以这是一个错字,我指的是同一个表。
-
@Rowland 我现在已经在上面包含了我的插入值。必须插入失败的值必须是错误消息中提到的 Customer__2D27B809。但我不知道那会是哪个特定客户。我希望这会有所帮助。
-
所以错误是您试图在 Orders 中插入任意 CustomerId 值 :) 您不需要更正 Customer 表中的值。它们并不意味着从 1 开始,也不意味着没有间隙。只需在订单中插入正确的 CustomerId 值。您不会真正使用手动编写的 CustomerId 值,而是从 Customer 表中选择它们,不是吗?
标签: sql-server