相同的SQL在一台机器上工作,但在另一台机器上产生超出范围的错误

时间:2011-06-24 03:48:32

标签: sql

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

当我在桌面计算机上运行SQL查询时,它很好。没有错误或任何东西。但是,当我在将要运行它的服务器上执行相同的代码时,它会失败。

我已经确定这是导致问题的SQL部分。 DateOfRun是一个DateTime字段。

 ,(SELECT intField
    FROM tableA
    WHERE RowIdentifier= ParentTable.RowIdentifier
            AND DateOfRun = Convert(Varchar(10),ParentTable.OfferOutcomeDateTime,120)) AS Days

为什么这会在一台机器上运行,而不是在另一台机器上运行?

4 个答案:

答案 0 :(得分:2)

我的猜测是,由于本地和服务器环境中的不同文化,因此字符串的DateTime转换失败。

答案 1 :(得分:2)

这绝对是奇怪的,可能与区域设置有关,但它就像旧的笑话

  

一个男人去医生办公室。他   说,“医生,我养的时候会疼   我的手臂在我的头上。“医生   回答:“那就不要举起你的胳膊   在你的头上。“

所以不要这样做。这样做

WHERE RowIdentifier= ParentTable.RowIdentifier
          AND DateOfRun = 
           DATEADD(DAY, DATEDIFF(DAY, 0, ParentTable.OfferOutcomeDateTime), 0) 

这是查看托马斯回答Most efficient way in SQL Server to get date from date+time?

的最佳方式

然后,无论区域设置如何,它都将起作用,因为它永远不会被表示为字符串

答案 2 :(得分:0)

您没有提到SQL的风格,但最可能的候选是char字段的输入格式与系统的语言环境设置之间的差异。

“2011年3月30日”是美国3月30日,但在英国毫无意义。 “30/3/2011”是英国3月30日,但在美国毫无意义。

答案 3 :(得分:0)

如果不同机器上的数据不同,这将适用于一台机器,而不适用于另一台机器。

如果您的区域设置不同,它也不会起作用。

你应该做点什么 SET DATEFORMAT dmy设置您要使用的格式。

您还可以在将日期转换为varchar之前将日期转换/转换为本地设置 - http://msdn.microsoft.com/en-us/library/ms187928.aspx