【问题标题】:Stop allowing null in a table column停止在表列中允许 null
【发布时间】:2014-04-19 16:40:24
【问题描述】:

我在 SQL Server 2008 中有一个表。 我需要一个直到现在还没有必要的列,不再允许NULL,而不会删除表格。 我试图做这样的事情:

ALTER TABLE [Sessions] ALTER COLUMN region_id NOT NULL;

编辑:这是一个小的语法错误。解决了。​​

【问题讨论】:

  • “我试图做这样的事情” ...然后发生了什么?
  • 如果您在问题中包含语法错误消息,您将不会得到答案。
  • 不,这绝对不是您在运行问题中的查询时收到的消息。这是您尝试使用 SSMS 的表设计器更改可空性时收到的消息。

标签: sql sql-server alter-table tablecolumn


【解决方案1】:

您必须首先将所有为 NULL 的值设置为非 NULL 值:

UPDATE [Sessions] 
SET region_id=-1
WHERE region_id IS NULL

您应该选择代表以前 NULL 值的值,而不是 -1,以便区分它们。

要摆脱储蓄预防,您可以继续:

Tools>Options>Designers> 并取消点击防止保存需要重新创建表的更改

【讨论】:

  • 您收到的信息是什么?
  • “不允许保存更改。您所做的更改需要删除并重新创建以下表格”
  • 您应该在 alter column 脚本中指定 region_id 列的类型
【解决方案2】:

您缺少数据类型。

ALTER TABLE [会话] ALTER COLUMN region_id int NOT NULL;

【讨论】:

    【解决方案3】:

    alter a column时也要指定数据类型:

    ALTER TABLE [Sessions] ALTER COLUMN region_id int /* ? */ NOT NULL;
    

    【讨论】:

      【解决方案4】:

      首先要像这样保存表格机会,您需要编写更改脚本,或者从 UI 保存时,您需要设置 SSMS 以删除并重新创建表格。为此;

      转到工具 选项 设计师 UNTICK 防止保存需要重新创建表的更改。

      如果您编写更改脚本,则需要先更改表,然后添加一个允许空值的新列。然后更新列并删除空值,然后您就可以将列设置为 NOT NULL。

      如果您遵循这些步骤,您将解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-25
        • 1970-01-01
        • 2013-07-31
        • 2021-10-26
        • 1970-01-01
        • 2021-05-08
        相关资源
        最近更新 更多