SQL Server对外键的约束

时间:2011-10-19 23:17:05

标签: sql-server sql-server-2005 tsql sql-server-2008 ssms

我有一个ItemComments表,其中一列具有链接到第二个表中的项条目的外键约束。我认为这是一对多的关系,因为第二个表中的每个项目都可以有很多注释,但是ItemComments表中没有两个项目可以与相同的注释条目相关联,因此多对多关系不会应用。

问题:

我想在此列上定义一个约束,以防止更改外键值,即我想防止某人意外更改特定ItemComment条目所关联的项ID。我对约束检查的表达式格式不是很熟悉,并且很好奇这种操作的语法是什么。或者还有另一种更直接的方法来实现这一目标吗?谢谢你的帮助。

更新

实现交叉引用表是否更好,就像在多对多关系中一样,以这种方式强制执行引用完整性?或者是否增加了必要的开销?

1 个答案:

答案 0 :(得分: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针对YourTable时,此触发器都会触发,但如果ROLLBACK是更新字段,则只会ItemId该事务。