Как принудительно установить ограничение NOT NULL при вставке, не затрагивая существующие нулевые значения? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть таблица со столбцом SMALLINT, которая в настоящее время обнуляется и имеет некоторые нулевые значения.Но с этого момента больше нельзя вставлять нулевые значения.

Но я также хочу сохранить существующие нулевые значения как есть, поскольку null и 0 имеют разные значения.Поэтому я думаю, что для добавления ограничения NOT NULL в столбец нет параметров.

Какой тип ограничения следует использовать в этой ситуации?

1 Ответ

1 голос
/ 20 сентября 2019

Вместо того, чтобы сделать столбец NOT NULL (который не будет работать), вы можете добавить проверочное ограничение, которое гарантирует, что значение не равно NULL, а затем применить проверочное ограничение с параметром NOCHECK.Вот пример:

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


...