【问题标题】:Can you replace or update a SQL constraint?您可以替换或更新 SQL 约束吗?
【发布时间】:2009-05-14 01:16:23
【问题描述】:

我为我称为“等级”的列编写了以下约束:

CONSTRAINT gradeRule CHECK grade IN (‘easy’, ‘moderate’, ‘difficult’),

以后是否可以将gradeRule 更新为具有不同的值?例如,“中等”和“困难”可以更改为“中等”和“困难”。

谢谢

【问题讨论】:

    标签: sql constraints sql-update


    【解决方案1】:

    您可以删除现有约束,并使用 NOCHECK 选项添加新约束。即使表中的数据违反了约束,这也允许您添加约束。但是这样做的问题是,如果不先让它们通过约束,您将无法更新现有记录。

    ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
    GO
    ALTER TABLE SomeTable ADD CONSTRAINT gradeRule ... WITH NOCHECK
    GO
    

    虽然这是可能的,但通常不建议这样做,因为未来更新数据可能会出现问题。

    【讨论】:

    • 澄清一下:您建议删除现有约束,然后添加修改后的约束不带 NOCHECK 选项,对吧?
    • 是的,正如其他答案中提到的,我可以删除约束,更新数据,然后制作新的约束。如果我想添加约束然后更新数据,我会使用 NOCHECK,但这可能会导致问题。
    • 正确答案在stackoverflow.com/questions/13244889/how-to-alter-constraint -- 不,你永远不能改变约束。
    【解决方案2】:

    删除约束,然后添加替换约束。 您至少不能在 SQL Server 中更新约束。

    ALTER TABLE SomeTable DROP CONSTRAINT gradeRule
    

    此外,您需要在添加新约束之前更新表数据,使其符合新约束。

    【讨论】:

      【解决方案3】:

      如果更改约束,表中当前的所有数据都必须满足约束。因此,如果您有 2 行“中等”的数据并尝试将约束更改为简单、中等和困难,它不会让您这样做。

      因此,您必须设置新的约束条件(简单、中等、中等、困难、困难),或者将数据更新为新值 - 中等 --> 中等等。

      【讨论】:

      • 最初的问题是是否可以更改约束。 Scott Ivey 的回答虽然不直接,但似乎是否定的(没有骰子;必须放弃它)。相反,你的似乎是肯定的。但是你用什么 SQL 语句来“改变约束”呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2017-01-02
      • 2011-01-25
      • 2020-11-17
      • 2010-10-26
      相关资源
      最近更新 更多