SQL Server错误:消息515,级别16,状态2-将值插入ID列? (NOT NULL字段已关闭)

时间:2018-10-13 14:38:43

标签: sql-server reference insert key id

我创建了一些表,这是其中之一:

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列。有什么建议吗?

1 个答案:

答案 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)
)

OrderIDJewelID组成了主键(复合键),这使这两列在插入语句中不允许为空:

INSERT INTO JewelryOrders(Quantity)
VALUES ('1'), ('2');

您只需要指定Quantity列,以及得到此错误的原因即可。

结论:JewelryOrders表中没有列允许Nulls

Create Primary Keys

  
      
  • 一个表只能包含一个PRIMARY KEY约束。

  •   
  • 在PRIMARY KEY约束中定义的所有列都必须定义为NOT NULL。如果未指定可空性,则所有列   参与PRIMARY KEY约束的可空性集   到NOT NULL。

  •