1

在新服务器中安装应用程序后,它会抛出错误:

The conversion of a varchar data type to a datetime data type resulted in an 
out-of-range value.

该应用程序在其他服务器上正常工作,所以我对这个问题感到困惑。保存的值是

25/4/2012 1:18:01 PM 

这是一个 DateTime 类型,已经被保存到 datetime 列中,所以我确信数据库和代码本身没有问题。问题可能完全是因为服务器的设置吗?任何具体原因和解决方案/解决方法?

4

3 回答 3

1

您可以为每个连接设置日期时间格式,例如

设置日期格式 dmy

此方法允许您使用日期格式发送到 d/m/y 的 SQL Server 的日期,但它取决于连接。如果与 SQL Server 建立了新连接,或者如果服务器停止并重新启动,则日期格式将恢复为 m/d/y。

永久设置格式

要在服务器上设置语言,您必须使用 sp_addlanguage 添加一种语言。下面的示例设置英国英语的语言并以 DD/MM/YY 格式给出日期。该示例也可以应用于其他国家/地区,但您可能需要修改 sp_addlanguage 的参数。

exec sp_addlanguage 'British', 'English', '一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月'、'一月、二月、三月、四月、五月、六月、七月,Aug,Sep,Oct,Nov,Dec', 'Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday', dmy,1 sp_configure 'default language', 1 reconfigure with override

了解更多信息

http://support.microsoft.com/kb/173907

于 2012-04-26T05:58:30.400 回答
1

防止问题的一种方法。

如果您对包含日期的提要的内容有任何影响,“Day# MonthName 4digityear”就是您想要的格式。无论区域设置如何,sql server 中的启发式算法都不会对“25APR2012”感到困惑。这是一种更健壮的格式。它将毫无困难地穿越海洋。

否则,您必须使用 convert(datetime, TheDateString, CorrectFormatNumber)

我认为 131 可能对你有用。

哦,为了回应一些评论,如果你可以防止这些数据采用字符串的形式,你应该这样做。

于 2012-04-25T13:55:36.093 回答
0

很好的建议,但就我而言,我懒得浏览数千行代码。在安装过程中重新安装sql并设置区域设置是最快且最耗时的方法。

在将日期时间字符串保存到数据库之前解析应用程序上的日期时间字符串是给定的。

设置语言和日期格式仅适用于当前查询,而不适用于每个查询。当然,更新代码上的 sql 查询是浪费时间,imo 和我的情况。

于 2012-04-26T04:27:05.480 回答