2014-10-29 156 views
0

我在創建我的表後嘗試輸入我的主鍵和外鍵。不過,我的外鍵存在問題,並希望得到任何幫助!這裏是我的代碼: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; 

我得到的外鍵的錯誤是:

消息1785,級別16,狀態0,第1行
引進國外KEY約束 'fk_employee' 上表'員工'可能會導致週期或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

Msg 1750,Level 16,State 0,Line 1
無法創建約束。查看以前的錯誤。

+4

我不認爲你可以使用CASCADE與自引用外鍵。 (事實上​​,我並不是一個非常喜歡使用CASCADE的人)。通常,刪除擁有下屬的員工的邏輯將以這樣一種方式編寫,即首先重新分配這些下屬。 – 2014-10-29 17:42:22

+0

這是學校的一項任務,方向明確要求我以這種方式編寫參考。 – Gunner89 2014-10-29 18:12:01

+0

好吧,那麼這些信息必須以某種方式放在筆記或課程資源中,不是嗎?或者,也許你的教師不太清楚SQL Server是如何工作的?你能告訴我們你的具體作業方向嗎? (並不是說我們真的應該幫助你做家庭作業。) – 2014-10-29 18:19:35

回答

0

刪除超級本地方存在上級

你不能對作爲主訴由SQL Server DELETE CASCADE,因爲它創造週期應該設定NULL值的所有行。

您需要創建出來的外鍵刪除第

ALTER TABLE EMPLOYEE ADD CONSTRAINT 
     fk_employee FOREIGN KEY (Supervisor_SSN) REFERENCES employee (SSN_Number) ; 

現在,你需要考慮如何設置監督員爲NULL了上刪除。你可以閱讀關於這個觸發器。

提示是在表上使用INSETAD OF DELETE觸發器,併爲已刪除的管理員設置NULL值。

你可以通過閱讀來書寫觸發器。