我刚刚开始使用SQL Server,并且对UPDATE和DELETE操作的完整性约束有疑问。为了便于解释,请考虑下面的这个简单示例,其中Contract_Header提供有关合同的最高级别的合同的总体信息,Contract_LineItem,其提供有关合同的年度信息(每年= 1个条目),以及Contract_LI_Status,a LineItem的状态,如'在合同','未支付'等
我的问题是我可以将Contract_LineItems中的ContractID更新为Contract_Header中的一个完全不同的ContractID,这意味着Contract_LineItem将引用一个完全不同的契约。 Contract_LineItem应该自动创建,之后不会更新到任何其他ContractID。虽然它应该是可删除的。
是否有可能 - 可能是 - 在SQL Server 2010中限制FK中的某个值被更改?
答案 0 :(得分:1)
最好的办法是创建一个引发错误的触发器,并在外键列更新时回滚事务。有点像:
CREATE TRIGGER trgAfterContractIdUpdate ON dbo.Contract_LineItem
FOR UPDATE AS
IF UPDATE(ContractID)
BEGIN
RAISERROR ('ContractID cannot be updated', 16, 1);
ROLLBACK TRANSACTION
END