【问题标题】:How to force NOT NULL constraint when inserting, without affecting existing null values?插入时如何强制 NOT NULL 约束,而不影响现有的空值?
【发布时间】:2020-01-21 03:09:45
【问题描述】:

我有一个带有SMALLINT 列的表,该列当前可以为空并且有一些空值。但从现在起不应再插入空值。

但我也想保持现有的 null 值不变,因为 null0 具有不同的含义。所以我认为给列添加一个 NOT NULL 约束是没有选择的。

在这种情况下我应该使用什么样的约束?

【问题讨论】:

    标签: sql-server database constraints schema


    【解决方案1】:

    您可以添加一个检查约束以确保该值不为 NULL,然后使用 NOCHECK 选项应用检查约束,而不是使列 NOT NULL(这将不起作用)。这是一个例子:

    USE tempdb;
    GO
    
    DROP TABLE IF EXISTS dbo.Test;
    
    CREATE TABLE dbo.Test
    (
        TestID int IDENTITY(1,1) NOT NULL
            CONSTRAINT PK_dbo_Test PRIMARY KEY,
        TestName varchar(50) NULL
    );
    GO
    
    INSERT dbo.Test (TestName)
    VALUES ('Fred'), (NULL), ('Mary');
    GO
    
    ALTER TABLE dbo.Test
    WITH NOCHECK ADD CONSTRAINT CK_dbo_Test_TestName_not_null
    CHECK (TestName IS NOT NULL);
    GO
    
    -- OK
    INSERT dbo.Test (TestName)
    VALUES ('Mia');
    GO
    
    -- Not OK
    INSERT dbo.Test (TestName)
    VALUES (NULL);
    GO
    
    
    

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-16
      • 2020-12-13
      • 2018-12-22
      • 2018-12-02
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多