SQLServer 2012将数据类型varchar转换为datetime时出错

时间:2017-09-13 09:07:11

标签: sql-server

我们在SQLServer 2005上有一个存储过程。如果我从SQL Management Studio以下列形式运行它:

exec spPerformance '13/09/2009 00:00:01','13/09/2017 23:59:59','D5A0700'',''D5A0900'',''Q1B1200'',''B2B0700'',''M1T0800'',''P1U0200'',''J2W0200'',''F5W0700'',''F5W0800'',''F5W1000','LN'',''MD'',''NE'',''NW'',''SC'',''SE'',''WS'

它没有问题。

我有另一台服务器使用SQLServer 2012,我们从SQLServer2005备份恢复到2012年。两者的校对相同,但在2005年,兼容级别设置为90,2012年设置为110。 2012服务器还有默认语言的其他属性设置为British English,默认全文语言LCID设置为1033

我需要做些什么才能让SP在2012服务器上运行,我们很可能会以这种方式传递100个SP的日期时间。

1 个答案:

答案 0 :(得分:0)

我建议明确转换。你能试试吗?请告诉我。

DECLARE @dd1 DATETIME
DECLARE @dd2 DATETIME
SET @dd1 = CONVERT(datetime, '13/09/2009 00:00:01' , 103);
SET @dd2 = CONVERT(datetime, '13/09/2009 23:59:59' , 103);
exec spPerformance @dd1
                 , @dd2
                 , ...

无论如何,我认为您也可以尝试以下(SET DATEFORMAT设置月,日和年日期部分的顺序 - 请参阅MS文档)

SET DATEFORMAT dmy; 
exec spPerformance '13/09/2009 00:00:01','13/09/2017 23:59:59', ...