执行TSQL插入语句时遇到错误

时间:2009-06-19 22:54:38

标签: tsql

我们的一位用户在开发服务器中执行了insert语句。插件工作正常。但是,当在生产服务器中执行相同的insert语句时,他遇到以下错误:

  

错误:.Net SqlClient数据提供程序错误消息:转换   char数据类型为日期时间数据类型导致超出范围   日期时间值。声明已经终止。

插入语句如下:

Insert into tbl_SeatWave_customers (Title
                                   ,FirstName
                                   ,Lastname
                                   ,EmailAddress
                                   ,HomeTelephone
                                   ,Address1
                                   ,Address2
                                   ,Address3
                                   ,Town
                                   ,County
                                   ,Postcode
                                   ,BuyerOrSeller
                                   ,OrderID
                                   ,ListingID
                                   ,BestCallDateTimeFrom
                                   ,bestcalldatetimeto
                                   ,FAQAsked
                                   ,Comments
                                   ,CallOutcome
                                   ,Spare1
                                   ,Spare2
                                   ) 
Values('Mr'
      ,'Darren'
      ,'Piper'
      ,'bazzt27@hotmail.com'
      ,'07825758328'
      ,'7 RUSSELL ROAD'
      ,''
      ,''
      ,''
      ,'CLWYD'
      ,'LL18 3BS'
      ,'Other'
      ,''
      ,'19/06/2009'
      ,'12:00'
      ,''
      ,'Callers tickets have not yet arrived.'
      ,'Resolved'
      ,'Yes'
      ,''
      )

表tbl_SeatWave_customers具有以下结构:

COLUMN_NAME           DATA_TYPE COLUMN_DEFAULT
NUID                  bigint    NULL
CallDateTime          datetime  (getdate())
Title                 nvarchar  NULL
FirstName             nvarchar  NULL
LastName              nvarchar  NULL
EmailAddress          nvarchar  NULL
HomeTelephone         nvarchar  NULL
MobileTelephone       nvarchar  NULL
WorkTelephone         nvarchar  NULL
Address1              nvarchar  NULL
Address2              nvarchar  NULL
Address3              nvarchar  NULL
Address4              nvarchar  NULL
Town                  nvarchar  NULL
County                nvarchar  NULL
Postcode              nvarchar  NULL
BuyerOrSeller         nvarchar  NULL
OrderID               nvarchar  NULL
ListingID             nvarchar  NULL
BestCallDateTimeFrom  datetime  NULL
BestCallDateTimeTo    datetime  NULL
FAQAsked              nvarchar  NULL
Comments              nvarchar  NULL
Spare1                nvarchar  NULL
Spare2                nvarchar  NULL
Spare3                nvarchar  NULL
Spare4                nvarchar  NULL
Spare5                nvarchar  NULL
CallOutcome           nvarchar  NULL

我的问题是什么原因导致此错误以及解决此问题的解决方案是什么?

4 个答案:

答案 0 :(得分:3)

我的猜测是国际化(来自客户端计算机的19/06/2009 vs 06/19/2009 vs 2009 06 19和/或配置不同的服务器 - 提示,一个相当常见的布局是'2009 / 06/19'),或者只是你或许你错误地使用了这个日期,它现在已经过了12日 - 也就是之前它认为是10月6日,11月6日,12月6日,热潮

当然,如果您使用参数(而不是字符串),则不会出现此问题。同上,带小数 - 123,456与123456相同?或123和近一半?

答案 1 :(得分:2)

问题在于“19/06/2009”which is specified in DD / MM / YYYY but your SQL Server instance expects it as MM / DD / YYYY`。

答案 2 :(得分:2)

日期格式mm / dd / yyyy或dd / mm / yyyy取决于用于连接服务器的登录语言设置。请阅读此处了解更多信息:

Setting a standard Date Format for SQL Server

答案 3 :(得分:0)

您的日期文字'19 / 2009/2009'可能被解释为样式101,美国,mm / dd / yyyy或样式103,英国/法国,dd / mm / yyyy。 19不是有效的“数字月”,所以我的猜测是你的开发服务器设置为英国/法国(2009年6月19日=>星期五,2009年6月19日)和你的生产服务器到美国。样式/格式(19/06/2009 =>错误)。

http://msdn.microsoft.com/en-us/library/ms180878.aspx#UsingDateandTimeFormats说:

字符串文字格式会影响应用程序中的数据呈现给用户,但不会影响SQL Server中基本的整数存储格式。但是,SQL Server可能会将字符串文字格式的日期值解释为应用程序或用户输入存储或日期函数,作为不同的日期。 解释取决于字符串文字格式,数据类型, 和运行时SET DATEFORMAT,SET LANGUAGE和默认语言选项设置的组合。
我们建议您使用不依赖于DATEFORMAT且是多语言的日期时间格式。 ISO 8601格式,'1998-02-23T14:23:05'和'1998-02-23T14:23:05-08:00'是唯一的国际标准格式。它们不是DATEFORMAT或默认的登录语言,而且是多语言。

相关问题