为什么我的外键是NULL插入值

本文关键字:NULL 插入 我的 为什么 | 更新日期: 2023-09-27 18:04:10

我是sqlserver初学者,我首先创建了一个表CUSTOMERS,见下面:

CREATE TABLE CUSTOMERS ( ID INT NOT NULL,
NAME VARCHAR(20) NOT NULL, 
AGE INT NOT NULL, 
ADDRESS CHAR (25) , 
SALARY DECIMAL (18,2) DEFAULT 70000, not null identity(1, 1) PRIMARY KEY (ID));

然后像这样插入值:

INSERT INTO [vims].[dbo].[CUSTOMERS] (NAME, AGE, ADDRESS, SALARY) 
VALUES('AbheshekKaBhai',21,'Agra',70000.00);  

并成功完成请看这个:http://prntscr.com/7w19cr '

我创建了另一个表ORDERS:

CREATE TABLE [vims].[dbo].ORDERS (
  ID INT not null identity(1, 1) PRIMARY KEY,
DATE DATETIME,
Customer_ID  INT FOREIGN KEY (Customer_ID) REFERENCES CUSTOMERS (ID),
AMOUNT INT );

然后像这样插入数据:

INSERT INTO [vims].[dbo].ORDERS(DATE,AMOUNT) VALUES(28,66000.00); 

我得到这样的表重复插入记录6次:http://prntscr.com/7w1a6j

我的问题是当我尝试在外键列中插入数据时,它会给出错误,说客户和订单之间的ID值存在冲突,当我在外键列中不添加任何内容时,它显示为空。为什么会这样呢?如何在外键列上插入值?

为什么我的外键是NULL插入值

在执行插入操作时需要执行以下操作:

Declare @CustomerID int
INSERT INTO [vims].[dbo].[CUSTOMERS](NAME,AGE,ADDRESS,SALARY)
    VALUES('AbheshekKaBhai',21,'Agra',70000.00);
@CustomerID = SCOPE_IDENTITY()
INSERT INTO [vims].[dbo].ORDERS(DATE,AMOUNT,Customer_ID
    VALUES(28,66000.00,@CustomerID); 

您没有在插入语句中插入外键。在插入时,子表中需要有外键的值。它不会自动接收。

首先,如果要在ORDERS表中插入引用Customer_ID的任何记录,则Customer ID应该存在于Customer表中。

其次,如果你不想在ORDERS表的外键列中添加NULL,那么while声明将该列设为NOT NULL。因此,任何没有适当关系的插入都不会被插入(包括null)。

 CREATE TABLE [vims].[dbo].ORDERS (
 ID INT not null identity(1, 1) PRIMARY KEY,
 DATE DATETIME,
 Customer_ID  INT NOT NULL FOREIGN KEY (Customer_ID) REFERENCES CUSTOMERS (ID),
 AMOUNT INT );

希望对你有帮助。