SQL Server 2008外键错误

时间:2014-10-29 17:40:01

标签: sql-server sql-server-2008

我在创建表格后尝试输入主键和外键。但是我的外键有问题,非常感谢任何帮助!这是我的代码:

Create Table EMPLOYEE 
(
    SSN_Number CHAR(9) NOT NULL,
    First_Name Varchar(15)NOT NULL,
    Mid_Name Char,
    Last_Name Varchar(15) NOT NULL,
    Birthday Date,
    Address Varchar(50),
    Gender Char,
    Salary Money default 8000,
    Supervisor_SSN Char(9),
    Department_Number int
);

ALTER TABLE EMPLOYEE
ADD CONSTRAINT pk_employee PRIMARY KEY (SSN_Number);
ADD CONSTRAINT ck_employee CHECK (Gender IN ('M', 'm', 'F', 'f'))
ADD CONSTRAINT fk_employee FOREIGN KEY (Supervisor_SSN) REFERENCES employee (SSN_Number) ON DELETE SET NULL;

我获得的外键错误是:

  

Msg 1785,Level 16,State 0,Line 1
  引入FOREIGN KEY约束' fk_employee'在桌子上#EMPLOYEE'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

     

Msg 1750,Level 16,State 0,Line 1
  无法创建约束。查看以前的错误。

1 个答案:

答案 0 :(得分:0)

删除主管应该为存在此主管的所有行设置NULL值

由于SQL Server在创建周期时抱怨,您无法使用ON DELETE CASCADE。

您需要使用ON DELETE子句

创建外键
ALTER TABLE EMPLOYEE ADD CONSTRAINT 
        fk_employee FOREIGN KEY (Supervisor_SSN) REFERENCES employee (SSN_Number) ;

现在你需要考虑如何在删除时将supervisor设置为NULL。你可以阅读有关此的触发器。

提示是在表上使用INSETAD OF DELETE触发器,并为已删除的主管设置NULL值。

你可以通过阅读来编写触发器。