从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。

来源:互联网 发布:南京行知实验中学 编辑:程序博客网 时间:2024/04/30 14:31

报错信息:
从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。 


得到一些线索 SET DATEFORMAT, 
查sql 帮助,其作用是:设置用于输入 datetime 或 smalldatetime 数据的日期部分(月/日/年)的顺序。 
有效参数包括 mdy、dmy、ymd、ydm、myd 和 dym。
问题原因就是处在这里。


网上原有的解决方案是 加上 SET DATEFORMAT ymd
但是sql文档上已经说明SET DATEFORMAT 只能影响当前会话的转换。 
如果逐一进行修改势必会十分的麻烦。


如果换一种思路的话
首先我们先
执行sp_helplanguage 相当于select * from master..syslanguages 
执行结果部分如下
23 dmy 0 BritishBritish English
24 dmy 0 eestiEstonian
27 dmy 0 Português (Brasil)Brazilian
28 ymd 0 繁體中文Traditional Chinese
30 ymd 0 简体中文Simplified Chinese
显然不同语言有着自己习惯的日期格式。我们只要修改我们的语言设置我们就可以修改所有的日期格式设置了。
SET LANGUAGE 会联动SET DATEFORMAT 。只要我能 SET LANGUAGE  成正确的语言,那么我的字符串日期就能正确处理。 


操作方法: 
打开企业管理器-->你注册的SQL server-->安全性 -->登录,双击你所用的登录用户,弹出 sql server 登录属性,修改默认设置 中的语言。 


备注: 
语言= English,  其DATEFORMAT 为 mdy, 但是它也能正确转换格式为“yyyy-mm-dd hh:mm:ss” 的字符串日期。 


关键字: 
SQL Server ,2147217913 ,