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 = NULL
和 Allow 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 列规范的主要内容,如果未能解决你的问题,请参考以下文章
mysql 插入not null 没有default报错(doesn't have a default value)