zoukankan      html  css  js  c++  java
  • 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型之间是存在隐式转换的

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

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/liubaolongcool/p/2152552.html
Copyright © 2011-2022 走看看