可以使用CHECK约束来防止重新分配列值吗?

时间:2012-01-09 17:26:12

标签: sql-server

我有一个可以为空的列,只能分​​配一次。设置后,任何覆盖该值的尝试都将失败。这可以通过CHECK约束来完成(即是否可以查看列的更新前值并与新值进行比较)或者这只能通过UPDATE TRIGGER完成?

谢谢!

2 个答案:

答案 0 :(得分:1)

不,检查约束无法看到列的“之前”值。

您需要触发此操作或通过权限进行管理(例如,仅允许对不包含该列的视图的更新权限。)

另请参阅相关的连接项Add DRI to enforce immutable column values

答案 1 :(得分:1)

您可以使用update触发器执行此操作,并使用以下查询:

update t1 set
    field = d.field
from
    table t1
    inner join inserted i on
        t1.id = i.id
    inner join deleted d on
        t1.id = d.id
where
    i.field != d.field

检查约束没有时间识别,我知道。