SqlServer 0和空字符串''等价?-----类型的隐式转换问题
今天在修改一個(gè)bug的時(shí)候發(fā)現(xiàn)的一個(gè)比較奇怪的問(wèn)題查詢(xún)部門(mén)的時(shí)候偶爾會(huì)出現(xiàn)錯(cuò)誤多查出一個(gè)不正確的部門(mén)
最后找到了原因
部門(mén)表 deptInfo
部門(mén)ID???????? 部門(mén)名稱(chēng)
deptId???????? deptName????? fatherID
-----------------------------------------------
100??????????????總裁辦???????????? 0
101????????????? 企業(yè)管理中心???? 100
?
select * from deptInfo di?where di.fatherId =返回部門(mén)Id的函數(shù)
我使用到的一個(gè)函數(shù)偶爾會(huì)返回一個(gè)空字符串''
select * from deptInfo di?where di.fatherId = ''
查詢(xún)結(jié)果
-----------------------------------------------
100??????????????總裁辦???????????? 0
讓我一時(shí)很奇怪 怎么會(huì)出現(xiàn)這種結(jié)果,從網(wǎng)上直接搜索關(guān)鍵字 “SqlServer 0 和空字符串”也沒(méi)有搜到原因
最后胡亂搜索看到了隱式轉(zhuǎn)換這個(gè)詞才想到這里
?
從網(wǎng)上找了些資料總結(jié)一下
隱式轉(zhuǎn)換指那些沒(méi)有指定 CAST 或 CONVERT 函數(shù)的轉(zhuǎn)換。顯式轉(zhuǎn)換指那些需要指定 CAST 或 CONVERT 函數(shù)的轉(zhuǎn)換。以下圖例顯示了可對(duì) SQL Server 2005 系
統(tǒng)提供的數(shù)據(jù)類(lèi)型執(zhí)行的所有顯式和隱式數(shù)據(jù)類(lèi)型轉(zhuǎn)換。其中包括 xml、bigint 和 sql_variant。不存在對(duì) sql_variant 數(shù)據(jù)類(lèi)型的賦值進(jìn)行的隱式轉(zhuǎn)換,但是存在轉(zhuǎn)換為 sql_variant 的隱式轉(zhuǎn)換。
從這張圖上可以看到int型和varchar型之間是存在隱式轉(zhuǎn)換的
隱式轉(zhuǎn)換就像埋在我們身邊的定時(shí)炸彈一樣隨時(shí)都可能爆發(fā),我們寫(xiě)程序的的時(shí)候一定要小心
轉(zhuǎn)載于:https://www.cnblogs.com/liubaolongcool/archive/2011/08/24/2152552.html
總結(jié)
以上是生活随笔為你收集整理的SqlServer 0和空字符串''等价?-----类型的隐式转换问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 需求规格说明书格式及要求
- 下一篇: VS技巧