SqlServer 0和空字符串''等价?-----类型的隐式转换问题

今天在修改一个bug的时候发现的一个比较奇怪的问题查询部门的时候偶尔会出现错误多查出一个不正确的部门

最后找到了原因

部门表 deptInfo

部门ID         部门名称

deptId         deptName      fatherID

-----------------------------------------------

100              总裁办             0
101              企业管理中心     100

 

select * from deptInfo di where di.fatherId =返回部门Id的函数

我使用到的一个函数偶尔会返回一个空字符串''

select * from deptInfo di where di.fatherId = ''

查询结果

-----------------------------------------------

100              总裁办             0
让我一时很奇怪 怎么会出现这种结果,从网上直接搜索关键字 “SqlServer 0 和空字符串”也没有搜到原因

最后胡乱搜索看到了隐式转换这个词才想到这里

 

从网上找了些资料总结一下

隐式转换指那些没有指定 CAST 或 CONVERT 函数的转换。显式转换指那些需要指定 CAST 或 CONVERT 函数的转换。以下图例显示了可对 SQL Server 2005 系

统提供的数据类型执行的所有显式和隐式数据类型转换。其中包括 xmlbigintsql_variant。不存在对 sql_variant 数据类型的赋值进行的隐式转换,但是存在转换为 sql_variant 的隐式转换。

从这张图上可以看到int型和varchar型之间是存在隐式转换的

隐式转换就像埋在我们身边的定时炸弹一样随时都可能爆发,我们写程序的的时候一定要小心

转载于:https://www.cnblogs.com/liubaolongcool/archive/2011/08/24/2152552.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值