如何使用外键将值插入现有 SQL 服务器表
How to insert values into existing SQL Server tables with foreign keys
我有一个数据库,我想向 table 插入新值,问题是我有两个 table 彼此 FK。我知道问题出在 Alter Table
,但我不知道是什么原因造成的。
第一个table:部门
CREATE TABLE [dbo].[Department]
(
[DID] [int] primary key,
[Name] [varchar](255) ,
[Description] [varchar](255) ,
[ManagerId] [int]
);
第二个table:OfficialEmployee
CREATE TABLE [dbo].[OfficialEmployee]
(
[EID] [int] primary key,
[StartDate] [date] ,
[Degree] [varchar](255) ,
[DepartmentId] [int] ,
CONSTRAINT [FK_DIDOfficial]
FOREIGN KEY([EID]) REFERENCES [dbo].[Employee] ([EID])
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT [FK_EIDOfficial]
FOREIGN KEY([DepartmentId]) REFERENCES [dbo].[Department] ([DID])
ON UPDATE CASCADE ON DELETE CASCADE
);
改变Table表达式:
ALTER TABLE [dbo].[Department] WITH CHECK
ADD CONSTRAINT [FK_DepMan]
FOREIGN KEY([ManagerId]) REFERENCES [dbo].[OfficialEmployee] ([EID])
ON DELETE NO ACTION
我只需要有人告诉我如何将值插入 tables
之一
提前致谢
鉴于结构,我认为您需要两次插入和一次更新:
- 插入一个有
NULL
经理的新部门。
- 在员工中插入经理table。
- 用经理的 ID 更新部门。
延迟约束将有助于解决这种情况,而无需插入空值行。但只有 Postgresql 和 Oracle 支持这种约束。使用 DEFERRABLE 关键字时,将仅在事务提交时强制执行约束。不幸的是 sql 服务器不支持此约束。
我有一个数据库,我想向 table 插入新值,问题是我有两个 table 彼此 FK。我知道问题出在 Alter Table
,但我不知道是什么原因造成的。
第一个table:部门
CREATE TABLE [dbo].[Department]
(
[DID] [int] primary key,
[Name] [varchar](255) ,
[Description] [varchar](255) ,
[ManagerId] [int]
);
第二个table:OfficialEmployee
CREATE TABLE [dbo].[OfficialEmployee]
(
[EID] [int] primary key,
[StartDate] [date] ,
[Degree] [varchar](255) ,
[DepartmentId] [int] ,
CONSTRAINT [FK_DIDOfficial]
FOREIGN KEY([EID]) REFERENCES [dbo].[Employee] ([EID])
ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT [FK_EIDOfficial]
FOREIGN KEY([DepartmentId]) REFERENCES [dbo].[Department] ([DID])
ON UPDATE CASCADE ON DELETE CASCADE
);
改变Table表达式:
ALTER TABLE [dbo].[Department] WITH CHECK
ADD CONSTRAINT [FK_DepMan]
FOREIGN KEY([ManagerId]) REFERENCES [dbo].[OfficialEmployee] ([EID])
ON DELETE NO ACTION
我只需要有人告诉我如何将值插入 tables
之一提前致谢
鉴于结构,我认为您需要两次插入和一次更新:
- 插入一个有
NULL
经理的新部门。 - 在员工中插入经理table。
- 用经理的 ID 更新部门。
延迟约束将有助于解决这种情况,而无需插入空值行。但只有 Postgresql 和 Oracle 支持这种约束。使用 DEFERRABLE 关键字时,将仅在事务提交时强制执行约束。不幸的是 sql 服务器不支持此约束。