问题描述
|
看来这个问题被问了很多,但没有一个答案给我结果。我正在把头发拉出来……所以希望有人能回答。
我有一台运行SQL Server 2005的生产服务器。我备份了数据库并将其还原到笔记本电脑的SQL Server Express实例上。现在,日期查询受到严重影响。在产品中。在服务器上,它们都存储为“ 2011年4月13日12:00:00”格式,但在我的笔记本电脑上,它们都显示为“ 2011-04-14 00:00:00.000”。当我执行查询试图在\“ 4/14/2011 \”上查找条目时,我的笔记本电脑给了我错误消息\“将varchar数据类型转换为日期时间数据类型导致值超出范围\” 。编辑:此确切查询在生产SQL Server上运行良好。 (我正在使用SSMS运行查询...而不是应用程序/代码)
我确保笔记本电脑的Windows区域设置与服务器(英语(美国))相同,并且“区域和语言”控制面板上的所有内容都完全相同。
最后,我运行以下两个查询:
select name,alias,dateformat
from syslanguages
where langid =
(select value from master..sysconfigures
where comment = \'default language\')
select @@language
分别给出了\“ * us_english,英语,mdy * \” .....和\“英国\”的结果。这个英国人从哪里来?现在,当我在查询之前运行此命令时(在Management Studio中)
SET DATEFORMAT mdy
然后,一切正常!但是在syslanguages查询中,它似乎已经是mdy格式。我不会到处都用\“ SET DATEFORMAT \”来重写我的应用程序-因此希望有人能提供一个线索。也许我的SQL Express安装是错误的,必须重新安装吗?
我将继续修补,以期使它起作用。
解决方法
您需要更改登录名的语言设置。
你可以通过
SSMS -> Security -> Logins -> YourLogin -> Properties -> Default Language
来做
或通过TSQL
ALTER LOGIN [YourLogin] WITH DEFAULT_LANGUAGE=[us_english]
,如果您以dd-mmm-yyyy
格式指定内容,或者更好的是使用DateTime
参数(而不是varchar输入),则不会有问题。
尝试使用以下方法将默认语言更改为我们英语:
EXEC sp_configure \'default language\',1033
RECONFIGURE
如果这样不起作用,则可以尝试使用语言代码0。
,您是将日期作为字符串文字传递-还是连接字符串以在应用程序中构建sql?
如果执行此操作,请考虑将参数用于dateTime数据类型。或者至少使用ODBC转义子句对它们进行转义,并按照{ts \'yyyy-mm-ddhh:mm:ss [.fff] \'}中的格式进行格式化,例如:{ts \'1998-09-24 10:02 :20 \'}。
这很可能是您的应用程序未正确传递日期时间。