如何使用外键将值插入现有SQL Server表中

时间:2018-12-08 14:15:11

标签: sql sql-server database alter-table

我有一个数据库,我想向该表中插入新值,问题是我有两个彼此为FK的表。我知道问题出在Alter Table,但我无法弄清楚是什么原因造成的。

第一张表:部门

 CREATE TABLE [dbo].[Department]
 (
    [DID] [int]  primary key,
    [Name] [varchar](255) ,
    [Description] [varchar](255) ,
    [ManagerId] [int]
);

第二张表: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
);

更改表的表达式:

ALTER TABLE [dbo].[Department] WITH CHECK 
    ADD CONSTRAINT [FK_DepMan] 
        FOREIGN KEY([ManagerId]) REFERENCES [dbo].[OfficialEmployee] ([EID]) 
                ON DELETE NO ACTION

我只需要有人告诉我如何将值插入表之一

提前谢谢

2 个答案:

答案 0 :(得分:2)

鉴于结构,我认为您需要两个插入和一个更新:

  1. NULL经理一起插入新部门。
  2. 将经理插入“雇员”表中。
  3. 使用经理的ID更新部门。

答案 1 :(得分:1)

延迟约束将帮助解决这种情况,而无需插入空值行。但是只有Postgresql和Oracle支持这种约束。使用DEFERRABLE关键字时,约束仅在事务提交时强制执行。不幸的是,SQL Server不支持此约束。