我在创建表格后尝试输入主键和外键。但是我的外键有问题,非常感谢任何帮助!这是我的代码:
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
无法创建约束。查看以前的错误。
答案 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值。
你可以通过阅读来编写触发器。