哪一列导致“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”?

Posted

技术标签:

【中文标题】哪一列导致“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”?【英文标题】:Which column is causing "the conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value"? 【发布时间】:2019-09-11 18:50:44 【问题描述】:

有什么方法可以确定哪一列导致了问题?是的,我可以手动查看我尝试插入/更新的对象并检查所有属性,但我正在寻找更强大的解决方案。例如,SQL Server now returns the truncated column。 datetime's 是否有等价物?

SqlException:将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。 声明已终止。

是的,我确定我有一个System.DateTime,这是System.DateTime.Minimum,SQL Server 中的列定义为datetime。我知道the fix ????。

【问题讨论】:

这不像截断数据问题那么简单。转换可以在数据中,也可以在连接谓词中,也可以在 where 谓词中。 在 SSMS 中,您可以使用 TRY_CONVERT() 选择有问题的列并测试是否返回 null,这应该使您能够准确找到该列中哪些行的值不会正确转换为日期时间。 查找 1753 年之前的日期(不尝试进行转换)。您能将其缩小到单个表达式或列吗? 【参考方案1】:

这个 SqlException 的原因是 System.DateTime.Minimum 返回的最小日期是01/01/0001,而 SQL Server 只支持从01/01/1753 开始的日期时间。

如果我没记错的话,您可以在 .NET 中使用 SqlDataTime.MinValue 来解决您的问题。

【讨论】:

以上是关于哪一列导致“将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围”?的主要内容,如果未能解决你的问题,请参考以下文章

将 datetime2 数据类型转换为 datetime 数据类型会导致值超出范围

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围

将 datetime2 数据类型转换为 datetime 数据错误

如何识别列抛出 System.Data.SqlClient.SqlException? (将 datetime2 数据类型转换为 datetime 数据类型)

插入数据:查看哪一列导致 Redshift 上的数字溢出