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

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

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/liubaolongcool/p/2152552.html
Copyright © 2011-2022 走看看