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型之间是存在隐式转换的

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

  • 相关阅读:
    做自己的ORMapping Framework ---- 第三讲 关于Attribute
    Hugepages,hugetlb_shm_group与ORA-27125
    65个面试回答技巧
    在线修改Schema
    percona innobackupex 遇到 connect to MySQL server as DBD::mysql module is not installed 问题
    MYSQL中的日期转换
    SHOW INNODB STATUS 探秘
    11g手动打补丁
    11g OCM自动打补丁
    How to create Oracle ASM devices using device-mapper multipath devices in Red Hat Enterprise Linux 6
  • 原文地址:https://www.cnblogs.com/liubaolongcool/p/2152552.html
Copyright © 2011-2022 走看看