插入值到日期字段获取异常时

时间:2011-01-02 05:09:41

标签: sql datetime constraints

在POP10100表中插入值到日期字段时会出现这样的异常

  

System.Data.SqlClient.SqlException:   INSERT语句与之冲突   CHECK约束   “CK_ POP10100 _DISCDA__009508B4”。该   数据库“TWO”发生冲突,   表“dbo.POP10100”,专栏   'DISCDATE'。声明一直如此   终止。在   System.Data.SqlClient.SqlConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)at   System.Data.SqlClient.SqlInternalConnection.OnError(SQLEXCEPTION   exception,Boolean breakConnection)

当我选中“DISCDATE”字段时,它会像这样写:

ALTER TABLE [dbo].[POP10100]  WITH CHECK 
  ADD CHECK  ((datepart(hour,[DISCDATE])=(0) 
             AND datepart(minute,[DISCDATE])=(0) 
             AND datepart(second,[DISCDATE])=(0) 
             AND datepart(millisecond,[DISCDATE])=(0)))

有人可以详细说明这个检查约束说什么,我的意思是我如何通过折扣日期值以避免上述异常。提前谢谢

2 个答案:

答案 0 :(得分:1)

datepart返回给定日期时间的一部分。

因此,它确保小时,分钟,秒和毫秒值都等于零。

更新:不要只是按原样传递DateTime,而是使用Date属性。 例如:

var date = DateTime.Now.Date;

答案 1 :(得分:0)

看起来它只接受时间为午夜(00:00:00)的日期。这可能是因为在SQL Server 2008之前,没有只保存日期值的数据类型,它将保存日期和时间值。