【问题标题】:Sql table with default value will not save when passed a NULL带有默认值的 Sql 表在传递 NULL 时不会保存
【发布时间】:2012-10-15 00:48:46
【问题描述】:

我有一个包含 CreatedDate 列的 sql 表。

在数据库中设置:

绑定的默认值(getdate())

ALTER TABLE [dbo].[Person] ADD  CONSTRAINT [DF__Person__Creat__6XXXXXXX]  DEFAULT (getdate()) FOR [CreatedDate]
GO

当我为该列发送 default 时插入有效,但如果我发送 NULL 我得到。

无法将值 NULL 插入列“CreatedDate”列中不允许空值。插入失败。

有没有办法让它工作,以便在发送 null 时设置当前日期?

【问题讨论】:

  • 能否请您显示该列的整个声明,包括约束?

标签: sql sql-server


【解决方案1】:

因为您在该列上设置了一个约束,并且您已指定该列上的默认值是当前日期GetDate()

【讨论】:

  • 那么有没有更好的方法来实现我想要的,即自动设置插入日期?
  • 不要在插入查询中添加列,例如,您有 2 列(colName, dateColumn),其中之一是日期列,默认值为 GetDate()查询,可以省略该列,例如INSERT INTO tableName(colName) VALUES ('valueHere')
  • 是的,将日期列完全排除在 INSERT 之外——不要在列列表中指定它,也不要在值列表中包含它的值。
【解决方案2】:

猜测一下,您正在使用如下形式的 INSERT 语句:

 INSERT INTO TableName VALUES (Value1, Value2, . . .)

改为使用这种形式:

 INSERT INTO TableName (Column1, Column2, Column4. . .) VALUES (Value1, Value2, Value4. . .)

请注意,第二种形式指定了要包含哪些列的值。只需省略您希望为其存储默认值的任何列。

这种形式的 INSERT 语句总是更可取,因为如果表中列的数量或顺序发生变化,它就不会那么脆弱。它也更清晰,有助于调试。

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 1970-01-01
    • 2016-03-25
    • 2011-04-15
    • 1970-01-01
    • 2019-08-17
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多