SQL Server NULL 和 DEFAULT 列规范

Posted

技术标签:

【中文标题】SQL Server NULL 和 DEFAULT 列规范【英文标题】:SQL Server NULL and DEFAULT column specifications 【发布时间】:2011-03-21 15:26:25 【问题描述】:

仅使用 Allow Nulls = Yes 声明列与同时使用 Default Value or Binding = NULLAllow Nulls = Yes 声明列有区别吗?

我特别感兴趣的是 JDBC 和 wasNull 方法语义是否存在差异。我的印象是Allow Nulls = Yes(没有 DEFAULT 规范)足以让您从 INSERT 子句中排除该列,并期望插入行中该字段的值被分配 SQL NULL 值...

有人建议我,当我没有将 DEFAULT 显式指定为 NULL 时,wasNull 行为不正确,专门针对我的数据库中使用结果集的 getString 方法从结果集中检索的 NVARCHAR 字段。 .

【问题讨论】:

【参考方案1】:

您可以将列声明为具有默认值NULL,但这样做毫无意义。我期望它实现的只是稍微减慢插入过程(因为它必须查找默认值)。 Allow Nulls = Yes 应该足够了。

我不明白wasNull 是如何具体参与其中的,因为据我所知,wasNull 用于使用结果集,而不是执行插入操作。

【讨论】:

实际上,根据数据类型,将列声明为默认值NULL 可能正是需要做的事情。 @Michael - 你有一个你正在考虑的例子吗? @Damien:请参阅我的答案中的链接。 (显然,这应该取决于数据类型和所需的结果。) @Michael - 没有提到需要默认值才能实现空值。第四个要点说“可以为空。使用了空值。” - 这表明您不需要对该列执行任何其他操作。【参考方案2】:

如果在INSERT 语句的列列表中未提供值,则仅使列允许空值并不能保证它具有值NULL

Books Online 在 Arguments 标题下有血淋淋的细节。看(column_list)

【讨论】:

以上是关于SQL Server NULL 和 DEFAULT 列规范的主要内容,如果未能解决你的问题,请参考以下文章

sql server中表达式null=0的值是

mysql 插入not null 没有default报错(doesn't have a default value)

sql server 如何改变计算结果的值 如null改变为0

SQL Server中奇妙的NULL

在 SQL Server 中处理 Null 值和重复记录

sql server 2000 如何改变 default属性