我有一个只有 1 个主列(nvarchar)的表,就像在设计器中一样,它被标记为主键并且不允许空值。但是不知何故,该表中有一行键值为空,它当然不是空的,并且不会与主键列中的任何其他行重复,并且没有发生任何冲突或违规。
但是据我所知,SQL Server 中的主列不允许使用这种值(空)。我想知道是否有任何选项可以打开以使其正常工作。或者我必须自己通过 CHECK 约束或在 C# 代码中检查值(在更新之前)。
您的帮助将不胜感激。谢谢!
我有一个只有 1 个主列(nvarchar)的表,就像在设计器中一样,它被标记为主键并且不允许空值。但是不知何故,该表中有一行键值为空,它当然不是空的,并且不会与主键列中的任何其他行重复,并且没有发生任何冲突或违规。
但是据我所知,SQL Server 中的主列不允许使用这种值(空)。我想知道是否有任何选项可以打开以使其正常工作。或者我必须自己通过 CHECK 约束或在 C# 代码中检查值(在更新之前)。
您的帮助将不胜感激。谢谢!
“空字符串”是长度为零的字符串。它不是 NULL,因此它不违反空检查。它肯定是 SQL Server 中基于字符的主键列的允许值。如果业务不允许空字符串值,则检查约束将是将其作为业务规则实现的最佳方式。这样,可能不知道规则的客户就不能违反它。
此代码在 SQL Server 中运行时没有违规,我只是为了确定而对其进行了测试。
create table TestTable (
myKey varchar(10) primary key,
myData int
)
GO
insert TestTable
select '', 1