为什么我的外键在插入值时为 NULL
Why my foreign key is NULL on inserting values
我是 sqlserver 初学者,我首先创建了一个 table 客户,见下文:
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));
然后我像这样在 table 中插入值:
INSERT INTO [vims].[dbo].[CUSTOMERS] (NAME, AGE, ADDRESS, SALARY)
VALUES('AbheshekKaBhai',21,'Agra',70000.00);
并成功完成
请看这个:
http://prntscr.com/7w19cr\
在我创建另一个 table 订单之后:
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 次时得到这样的 table:
http://prntscr.com/7w1a6j
我的问题是,当我尝试在外键列中插入数据时,它会报错说 CUSTOMERS 和 ORDERS 之间存在 ID 值冲突,而当我在外键列中不添加任何内容时,它显示为空。它为什么这样做?如何在外键列上插入值?
您需要在执行插入时执行以下操作:
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);
您没有在插入语句中插入外键。插入时子 table 中需要有一个外键值。它不会自动接受。
首先,如果您想在引用 Customer_ID 的订单 table 中插入任何记录,客户 ID 应该存在于客户 table 中。
其次,如果您不想在 ORDERS Table 的外键列中添加 NULL,则在声明时将该列设为 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 );
希望对您有所帮助。
我是 sqlserver 初学者,我首先创建了一个 table 客户,见下文:
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));
然后我像这样在 table 中插入值:
INSERT INTO [vims].[dbo].[CUSTOMERS] (NAME, AGE, ADDRESS, SALARY)
VALUES('AbheshekKaBhai',21,'Agra',70000.00);
并成功完成 请看这个: http://prntscr.com/7w19cr\
在我创建另一个 table 订单之后:
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 次时得到这样的 table: http://prntscr.com/7w1a6j
我的问题是,当我尝试在外键列中插入数据时,它会报错说 CUSTOMERS 和 ORDERS 之间存在 ID 值冲突,而当我在外键列中不添加任何内容时,它显示为空。它为什么这样做?如何在外键列上插入值?
您需要在执行插入时执行以下操作:
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);
您没有在插入语句中插入外键。插入时子 table 中需要有一个外键值。它不会自动接受。
首先,如果您想在引用 Customer_ID 的订单 table 中插入任何记录,客户 ID 应该存在于客户 table 中。
其次,如果您不想在 ORDERS Table 的外键列中添加 NULL,则在声明时将该列设为 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 );
希望对您有所帮助。