我们的一位用户在开发服务器中执行了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
我的问题是什么原因导致此错误以及解决此问题的解决方案是什么?
答案 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取决于用于连接服务器的登录语言设置。请阅读此处了解更多信息:
答案 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或默认的登录语言,而且是多语言。