2013-12-16 78 views
2
CREATE TABLE Accounts 
(ID INTEGER IDENTITY(1,1) PRIMARY KEY); 


CREATE TABLE Students 
(ID INTEGER PRIMARY KEY , s_name VARCHAR(20) ,date_birth DATEtime,age AS (YEAR(CURRENT_TIMESTAMP) - YEAR(date_birth)) , school_id INTEGER , 
FOREIGN KEY(ID) REFERENCES Accounts(ID) , 
FOREIGN KEY(school_id) REFERENCES Schools(ID) 
); 

,當我插入一個學生:外國主鍵插入(增量發行)

INSERT INTO Students (s_name , date_birth , school_id) 
VALUES ('nada' , 2/2/1993 , 1) 

出現的錯誤: 不能將NULL值插入列「ID」,表「myschool.dbo。學生們';列不允許有空值。 INSERT失敗。

+0

請檢查'學生'桌上是否有INSTEAD OF/AFTER觸發器。 –

+0

你似乎在說ID是學生的主要關鍵,並引用accounts.id。這是你的意圖嗎?例如帳戶和學生之間的1 - 1關係? –

+0

有趣的年齡定義。 2011年12月31日出生的人在一天後變成1歲。 –

回答

1

您沒有爲Students.ID列指定一個值。您可能需要將其設置爲身份,你Account.ID列由相同:

ID INT IDENTITY (1,1) PRIMARY KEY 
+0

它給了我這個錯誤: INSERT語句與FOREIGN KEY約束「FK__Students__ID__2942188C」衝突。衝突發生在數據庫「myschool」,表「dbo.Accounts」,列'ID'。 – user3100088

+0

@ user3100088:我不明白你的意思。你的意思是你得到同樣的錯誤? –

+0

沒有不同的錯誤: INSERT語句與FOREIGN KEY約束「FK__Students__ID__2942188C」衝突。數據庫「myschool」發生衝突,表「dbo.Accounts」 – user3100088

1

然後加入您需要從表Accounts找到StudentID一個Student

由於Student引用Accounts,這些必須已經存在一個Student記錄之前的記錄Account可以加入,所以你可能需要首先將賬戶記錄開始。