【问题标题】:How to add a check constraint on column for update如何在列上添加检查约束以进行更新
【发布时间】:2016-12-19 14:32:24
【问题描述】:

我正在向表中添加一列,并希望对其设置一个约束,即在给定日期之前不允许对其进行更新,并将其存储在同一表行中。

这是我目前得到的:

ALTER TABLE sometable 
    ADD somecolumn BIT NOT NULL DEFAULT 0;

ALTER TABLE sometable 
    ADD CONSTRAINT somedate_before_now 
        CHECK (somedatecolumn < GETDATE()); 

我怎样才能让它工作,只更新somecolumn?应该允许插入和更新其他列。

我正在内存中的 H2 数据库上对此进行测试,但它也必须与 SQL Server 一起使用。

【问题讨论】:

    标签: sql sql-server database h2


    【解决方案1】:

    我认为安全的方法是使用触发器。

    这样的约束:

    CHECK (somedatecolumn < GETDATE())
    

    从关系的角度来看并没有真正的意义。它可以保证updateinsert 上的值是正确的。但是,数据库不能保证这些值通常是正确的。您应该使用CHECK 约束来处理您始终希望连续实现的事情。

    (问题是GETDATE() 在行上没有变化。)

    【讨论】:

    • 我同意。不仅如此,OP还希望这仅适用于更新,因此检查约束不可能是正确的方法。我会选择一个而不是更新触发器。
    • 谢谢。老实说,我对触发器了解不多,所以我真的不能说这是否适用于验证我的专栏,但我明白你关于 GETDATE() 的观点。我现在已将验证添加到我的服务中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2021-06-16
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多