gpt4 book ai didi

sql-server - SQL SERVER 检查约束中的 NOT NULL 子句

转载 作者:行者123 更新时间:2023-12-03 03:37:04 26 4
gpt4 key购买 nike

在创建此检查约束(在 SQL Server 中)后,我惊讶地发现:

ALTER TABLE [dbo].[MYTABLE]
ADD CONSTRAINT MyConstraint
CHECK (MyColumn >0);

我能够添加一个具有 NULL 值的元素:

insert into dbo.MYTABLE(MyColumn) values(NULL);

...这实际上是我想阻止的:)

我必须将约束修改为:

ALTER TABLE [dbo].[MYTABLE]
ADD CONSTRAINT MyConstraint
CHECK (MyColumn IS NOT NULL);

第二个版本正确地阻止我插入 MyColumn = NULL 的元素。

是的,在这个例子中,我可以将 MyColumn 设置为“NOT NULL”。但我真正的问题包括其他条件,其中 MyColumn 可能为空,必须包含在约束中。我将问题范围缩小到下面的代码,这对我来说实际上似乎不合逻辑。

看起来 SQL SERVER 将 NULL 值视为 > 0?但是,当您运行时情况并非如此:

SELECT * from MyTable where MyColumn >0;

它正确地排除了 NULL 值。那么为什么检查约束的行为会有所不同???

最佳答案

没有 SQL Server 会将 NULL 视为 NULL。如果要防止插入 NULL,请将该列设置为 NOT NULL。针对 NULL 值的任何类型的相等检查都将始终返回 NULL。它不能大于 0、小于 0 或等于 0,因为该值未知。

关于sql-server - SQL SERVER 检查约束中的 NOT NULL 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com