【问题标题】:SQL Server NULL and DEFAULT column specificationsSQL Server NULL 和 DEFAULT 列规范
【发布时间】: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 字段。 .

【问题讨论】:

    标签: database-design null default sql-server-2008-r2


    【解决方案1】:

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

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

    【讨论】:

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

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

    Books OnlineArguments 标题下有血淋淋的细节。看(column_list)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 2016-10-31
      • 2021-09-12
      • 2012-09-03
      • 1970-01-01
      • 2013-08-11
      • 2020-04-15
      相关资源
      最近更新 更多