【发布时间】:2020-01-21 03:09:45
【问题描述】:
我有一个带有SMALLINT 列的表,该列当前可以为空并且有一些空值。但从现在起不应再插入空值。
但我也想保持现有的 null 值不变,因为 null 和 0 具有不同的含义。所以我认为给列添加一个 NOT NULL 约束是没有选择的。
在这种情况下我应该使用什么样的约束?
【问题讨论】:
标签: sql-server database constraints schema
我有一个带有SMALLINT 列的表,该列当前可以为空并且有一些空值。但从现在起不应再插入空值。
但我也想保持现有的 null 值不变,因为 null 和 0 具有不同的含义。所以我认为给列添加一个 NOT NULL 约束是没有选择的。
在这种情况下我应该使用什么样的约束?
【问题讨论】:
标签: sql-server database constraints schema
您可以添加一个检查约束以确保该值不为 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
【讨论】: