为什么SQLite中的主键列是空的?

时间:2013-04-26 22:11:10

标签: sql sql-server constraints primary-key

我有一个只有1个主列(nvarchar)的表,就像在设计器中一样,它被标记为主键而不允许空值。但是通过某种方式,该表中有一行,键值为空,它当然不为空,并且不与主键列中的任何其他行重复,并且没有发生任何冲突或违规。

但据我所知,SQL Server中的主列不允许使用这种值(空)。我想知道是否有任何选项可以让它正常工作。或者我必须通过CHECK约束自己检查值或在C#代码中检查(在更新之前)。

我们非常感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

“Empty-string”是一个长度为零的字符串。它不是NULL,因此它不违反空检查。它肯定是SQL Server中基于字符的主键列的允许值。如果业务不允许空字符串值,则检查约束将是将其实现为业务规则的最佳方式。这样,可能不了解规则的客户就不会违反规则。

此代码在SQL Server中运行时没有违规,我只是为了确定而对其进行了测试。

create table TestTable (
  myKey varchar(10) primary key,
  myData int
)
GO

insert TestTable
select '', 1