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 系
統提供的數據類型執行的所有顯式和隱式數據類型轉換。其中包括 xml、bigint 和 sql_variant。不存在對 sql_variant 數據類型的賦值進行的隱式轉換,但是存在轉換為 sql_variant 的隱式轉換。
從這張圖上可以看到int型和varchar型之間是存在隱式轉換的
隱式轉換就像埋在我們身邊的定時炸彈一樣隨時都可能爆發,我們寫程序的的時候一定要小心
轉載于:https://www.cnblogs.com/liubaolongcool/archive/2011/08/24/2152552.html
總結
以上是生活随笔為你收集整理的SqlServer 0和空字符串''等价?-----类型的隐式转换问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 需求规格说明书格式及要求
- 下一篇: 分享31个非常有用的 HTML5 教程