我创建了一些表,这是其中之一:
CREATE TABLE JewelryOrders
(
OrderID INT,
JewelID INT,
Quantity INT NOT NULL,
PRIMARY KEY (OrderID, JewelID),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (JewelID) REFERENCES Jewels(JewelID)
)
然后我尝试插入一些数据:
INSERT INTO JewelryOrders(Quantity)
VALUES ('1'), ('2');
但是,我收到一条错误消息:
515消息,第16级,州2,第101行
无法将值NULL插入表'JewelryStore.dbo.JewelryOrders'的'OrderID'列中;列不允许为空。 INSERT失败。
OrderID
在其原始表中的定义如下:
CREATE TABLE Orders
(
OrderID INT IDENTITY PRIMARY KEY,
CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID),
OrderDate DATE NOT NULL,
SumTotal INT NOT NULL,
)
因此它不是NOT NULL
列。有什么建议吗?
答案 0 :(得分:1)
那是因为主键列不允许为空。
在您的代码中
CREATE TABLE JewelryOrders
(
OrderID INT,
JewelID INT,
Quantity INT NOT NULL,
PRIMARY KEY(OrderID, JewelID),
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
FOREIGN KEY (JewelID) REFERENCES Jewels(JewelID)
)
OrderID
和JewelID
组成了主键(复合键),这使这两列在插入语句中不允许为空:
INSERT INTO JewelryOrders(Quantity)
VALUES ('1'), ('2');
您只需要指定Quantity
列,以及得到此错误的原因即可。
结论:JewelryOrders
表中没有列允许Nulls
。
一个表只能包含一个PRIMARY KEY约束。
在PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。如果未指定可空性,则所有列 参与PRIMARY KEY约束的可空性集 到NOT NULL。