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