Sql server SQL Server对外键的约束

Sql server SQL Server对外键的约束,sql-server,sql-server-2005,tsql,sql-server-2008,ssms,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,Ssms,我有一个ItemComments表,其中有一列带有外键约束,链接回第二个表中的项条目。我认为这是一种一对多关系,因为第二个表中的每个项目都可以有许多注释,但没有两个项目可以与ItemComments表中的同一注释项相关联,因此多对多关系不适用 问题: 我希望在此列上定义一个约束,以防止更新外键值,即,我希望防止有人意外更改与特定ItemComment条目关联的项ID。我对约束检查的表达式格式不是很熟悉,我想知道这样一个操作的语法是什么。还是有其他更直接的方法来实现这一点?谢谢你的帮助 更新 像在

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

问题:

我希望在此列上定义一个约束,以防止更新外键值,即,我希望防止有人意外更改与特定ItemComment条目关联的项ID。我对约束检查的表达式格式不是很熟悉,我想知道这样一个操作的语法是什么。还是有其他更直接的方法来实现这一点?谢谢你的帮助

更新


像在多对多关系中那样实现交叉引用表以这种方式强制引用完整性是否更好?或者这会增加更多的开销吗?

您可以随时使用触发器。比如:

create trigger dml_PreventUpdate
on YourTable
after update
as
    if UPDATE(ItemId)
    rollback
有两种类型的数据操作语言(DML)触发器。有一个
而不是
,然后是一个
后/FOR
触发器(
FOR
的功能相同)。顾名思义,在事务发生之前执行
而不是
触发器。正如其名称所示,一个
AFTER
触发器在触发操作之后执行


基本上,这个触发器所做的就是测试
ItemId
列是否从针对表
YourTable
运行的
UPDATE
语句中更新。每次对
YourTable
进行
UPDATE
时,此触发器都会触发,但只有
ItemId
是更新字段时,它才会
回滚事务。

嗨,Shark,我承认我不熟悉使用触发器,但这听起来像是一个选项。我将阅读更多关于这个主题的内容。@kingrichard2005我已经编辑了我的帖子,并添加了一个关于触发器和到底发生了什么的简要说明。我明白了,听起来触发器是一种方式。我会接受你的回答。谢谢Shark。除了执行回滚之外,您可能还想
raiserror