2011-10-19 54 views
0

我有一個ItemComments表,它具有一個外鍵約束連接回第二個表中的項目條目的列。我認爲這是一對多的關係,因爲第二個表中的每個項目都可以有很多註釋,但是沒有兩個項目可以與ItemComments表格中的同一個註釋項目相關聯,所以多對多關係不會應用。對外鍵的SQL Server約束

問題:

我想定義在此列上的約束,這將阻止更新外鍵值,即我要防止有人意外更改某個特定ItemComment條目與相關聯的項目ID 。我對約束檢查的表達式格式不是很熟悉,並且很好奇這種操作的語法是什麼。還是有另一種更直接的方式來完成這一點?謝謝您的幫助。

UPDATE

是更好地實現交叉引用表,你會在很多一對多的關係,執行本辦法參照完整性?或者是增加了比必要的更多的開銷?

回答

1

您可以隨時使用觸發器。喜歡的東西:

create trigger dml_PreventUpdate 
on YourTable 
after update 
as 
    if UPDATE(ItemId) 
    rollback 

有兩種類型的數據操縱語言(DML)觸發器。有一個INSTEAD OF,然後是一個AFTER/FOR觸發器(AFTERFOR功能相同的方式)。顧名思義,一個INSTEAD OF觸發器在事務發生之前執行。一個AFTER觸發器,正如其名稱所暗示的,在觸發操作之後執行。

基本上所有這個觸發器正在測試以查看ItemId列是否從UPDATE語句對錶運行更新。每觸發YourTable有一個UPDATE,這個觸發器就會觸發,但如果ItemId是一個更新的字段,它將只有ROLLBACK該事務。

+0

嗨鯊魚,我承認我不熟悉使用觸發器,但這聽起來像一個選項。我會詳細閱讀這個主題。 – kingrichard2005

+0

@ kingrichard2005我編輯了我的文章,並添加了關於觸發器的簡要說明以及究竟發生了什麼。 – 2011-10-19 23:31:09

+1

我明白了,聽起來像觸發器是要走的路。我會接受你的回答。謝謝鯊魚。 – kingrichard2005