2013-03-09 188 views
-1

我正在參考sql中的參考數據完整性。參考數據完整性

我想創建一個場景,我有三個表名branch1,branch2branch3Branch2Branch3與外鍵的branch1表連接。

現在我想對branch1表創建一個系統,如果我在branch1表中插入「主動」的branch2branch3表將能夠在表中插入,當我在branch1表中插入「無效」,另2個表將無法在表格中插入任何東西。

這一切都想用參照數據完整性來創建。

所以請幫助我,我都試過,但我沒有成功

+1

你所描述的與引用完整性無關(至少不是外鍵的實際工作方式)。這更多地描述了應用程序語義。 – Oded 2013-03-09 12:03:51

+0

我正在談論級聯更新和刪除,可以用這些級聯更新和刪除來做到這一點。 – Mufasil 2013-03-09 12:06:03

+0

這個問題沒有明確問到。以下聲明意味着什麼? '其他2個表格將無法在表格中插入任何東西.'表格不會插入到其他表格中。你的意思是,另外兩張桌子變成只讀嗎? – Tim 2013-03-09 13:19:53

回答

1

您可以使用觸發器。

BRANCH2BRANCH3上的觸發器可用於檢查BRANCH1表中的ACTIVE。如果存在,插入可以繼續,否則插入可以取消。

請參閱MSDN Create Trigger doco的語法。

這裏有一個教程,我發現過一個快速谷歌:An Intro to SQL Triggers @ SQL Team


如果您還需要控制參照完整性,觸發器可用於這也太 - 如果父記錄從一個表中刪除,例如,該表上的觸發器可以首先從其他表中刪除子記錄,以確保約束不會阻止刪除。

但是,由於您的問題中沒有描述真正的父母/子女關係,因此我無法看到參照完整性如何應用。

+0

好,但我想要這些與級聯參照完整性 – Mufasil 2013-03-09 12:17:23

+1

@Mufasil你在你的問題中描述的與級聯參照完整性無關。你的問題描述了基於'BRANCH1'中的值控制'BRANCH2'和'BRANCH3'上的插入。 – Sepster 2013-03-09 12:19:08

+0

好的,但有人說我用級聯的參照完整性。你可以告訴我,它是可以做到的。 – Mufasil 2013-03-09 12:21:44

0

的表不將數據插入到其他表。查詢確實如此。您始終可以在查詢中添加'where'子句以使更新有條件。

+0

是的確切,但我希望如果我創建這三個表我想創建在branch1表中的級聯方法,如果我插入'主動'的查詢在表branch1然後我插入到其他2表插入將不執行。 – Mufasil 2013-03-09 12:12:22