比如某个MEMBER表有字段Mobile,类型Char(11),一般情况下,如果数据正常,即所有MEMBER记录都存在MOBILE且MOBILE字段值均为数字,则以下SQL语句正常:
AND Mobile= 13698756256
假如存在MEMBER表存在Mobile值为非数字字符串或者NULL时,
AND Mobile= 13698756256 检索即报错“从数据类型 varchar 转换为 numeric 时出错”这里我理解为:SQLSERVER数据库内部检索时,因为13698756256是数字,则会先把Mobile转换成Number,然后转换后的和13698756256进行匹配判断;
于是,当Mobile值为非数字字符串或者NUll时,转换即报错“从数据类型 varchar 转换为 numeric 时出错”接着测试
1.and MobileNo = 18999999999 and STATUS = 2 报错“从数据类型 varchar 转换为 numeric 时出错”
2.and MobileNo = 18999999999 and ID=5 检索正常无数据
已知STATUS = 2 有大量数据, ID=5 存在数据
继续测试发现:
当第二个条件可以限定为一条数据时,检索正常无数据
当第二个条件不能限定为一条数据时,这时候SQL数据库还需要根据第一条件去限定,同前面理,报“从数据类型 varchar 转换为 numeric 时出错”已下为只是黑盒测试来推荐,尚未考究SQLSERVER2005的内部运行机制如果测试或者分析存在不合理的情况,请高手指点,大家也可以相互探讨
AND Mobile= 13698756256
假如存在MEMBER表存在Mobile值为非数字字符串或者NULL时,
AND Mobile= 13698756256 检索即报错“从数据类型 varchar 转换为 numeric 时出错”这里我理解为:SQLSERVER数据库内部检索时,因为13698756256是数字,则会先把Mobile转换成Number,然后转换后的和13698756256进行匹配判断;
于是,当Mobile值为非数字字符串或者NUll时,转换即报错“从数据类型 varchar 转换为 numeric 时出错”接着测试
1.and MobileNo = 18999999999 and STATUS = 2 报错“从数据类型 varchar 转换为 numeric 时出错”
2.and MobileNo = 18999999999 and ID=5 检索正常无数据
已知STATUS = 2 有大量数据, ID=5 存在数据
继续测试发现:
当第二个条件可以限定为一条数据时,检索正常无数据
当第二个条件不能限定为一条数据时,这时候SQL数据库还需要根据第一条件去限定,同前面理,报“从数据类型 varchar 转换为 numeric 时出错”已下为只是黑盒测试来推荐,尚未考究SQLSERVER2005的内部运行机制如果测试或者分析存在不合理的情况,请高手指点,大家也可以相互探讨
解决方案 »
- 求助1条统计语句
- SqlConnection会自动断开
- Sql SERVER2000数据库,在企业管理器中建表不成功!!!
- 下流问题:为什么procedure开始和结尾要写SET QUOTED_IDENTIFIER ON
- 急求一SQL语句的写法,请帮忙
- 两个相同结构表的查询!忘高手指教指教!一个简单的问题!!!
- 如何查询字段中有乱码的记录?
- 求查询语句
- 当字段ID的属性设为“自动编号”时,当删除记录在添加新的记录时,ID的号码无限增大,是否会影响数据库和程序的工作性能
- 请教关于 SQLServer的CREATE TABLE 的一点小问题???
- 同义词表中如何建触发器?
- win764位安装sql2008出问题了?
Mobile= 13698756256
会把你的varchar 列转换为int 在和13698756256比较
就这样了等号两边的数据类型不一致会导致效率降低或出错
1.and MobileNo = 18999999999 and STATUS = 2 报错“从数据类型 varchar 转换为 numeric 时出错”
2.and MobileNo = 18999999999 and ID=5 检索正常无数据
那尝试先查一下是哪个字段导致没数据或者报错
额,我帖子中已经说的很明确了吧。
是MobileNo字段存在不正常数据引起的
AND Mobile= 13698756256 这样写明显是错误 AND Mobile= "13698756256"
加个双引号才对
这个显而易见的。我的意思是来探究下 SQLSERVER内部到底是怎么个运行机制