SQL?Server?ISNULL?不生效原因及解決
SQL Server ISNULL 不生效原因
數(shù)據(jù)庫(kù):SQL Server 2008 R2
原始SQL:historyval 字段沒(méi)有數(shù)據(jù)顯示為NULL,用ISNULL判斷為NULL的時(shí)候替換為 0.0
SELECT ?? ?ISNULL(historyval, 0.0) FROM ?? ?ce_bf_l_energyh_t_2 WHERE ?? ?tagname = '123'
問(wèn)題
用ISNULL只后數(shù)據(jù)依舊為NULL并沒(méi)有替換掉。
原因
ISNULL只作用于查詢(xún)出數(shù)據(jù)后字段為NULL可以替換生效、如果查詢(xún)的時(shí)候這條數(shù)據(jù)本身為NULL、字段替換時(shí)ISNULL則不生效。
解決方法
先用 if exists(結(jié)果集)判斷這條數(shù)據(jù)是否存在(也就是說(shuō)這條select這條sql有沒(méi)有結(jié)果集),BEGIN 表示語(yǔ)句塊的開(kāi)始;END 表示語(yǔ)句塊的結(jié)束(加不加 BEGIN END 代碼塊都可以)。
如果滿足條件直接在下方寫(xiě) SQL。
不滿足條件時(shí),則在 ELSE 下方寫(xiě) SQL。如此,數(shù)據(jù)進(jìn)行了替換。
IF EXISTS ( ?? ?SELECT ?? ??? ?ISNULL(historyval, 0.0) ?? ?FROM ?? ??? ?ce_bf_l_energyh_t_2 ?? ?WHERE ?? ??? ?tagname = '123' ) BEGIN ?? ?--如果存在 ?? ?SELECT ?? ??? ?ISNULL(historyval, 0.0) ?? ?FROM ?? ??? ?ce_bf_l_energyh_t_2 ?? ?WHERE ?? ??? ?tagname = '123' ?? ?END ?? ?ELSE ? ?? ?BEGIN ?? ??? ?--如果不存在 ?? ??? ?SELECT ?? ??? ??? ?0.0 ?? ??? ?END
SQL Server ISNULL 真是個(gè)坑,CPU飆升90% +
- table1大概1100多萬(wàn)數(shù)據(jù)
- table2大概80多萬(wàn)數(shù)據(jù)
MES系統(tǒng),使用了以下SQL語(yǔ)句,并且這個(gè)語(yǔ)句每分鐘終端會(huì)并發(fā)執(zhí)行一次(大概30個(gè)客戶端)
SELECT ? ? AA.id? FROM ? ?table1 aa ? ? LEFT JOIN table2 ?bb ON bb.No= aa.No? WHERE
--就下面這句,把服務(wù)器CPU干到90%多
isnull( aa.fanCode,'0')!='0'?
修改為 :aa.fanCode IS NOT NULL 后CPU回到個(gè)位數(shù)。
總結(jié):盡量少用isnull()函數(shù),就算用也盡量不用在where后面。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
查詢(xún)表中某字段有重復(fù)記錄個(gè)數(shù)的方法
本篇文章介紹了,查詢(xún)表中某字段有重復(fù)記錄個(gè)數(shù)的方法。需要的朋友參考下2013-04-04
關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)簡(jiǎn)介
數(shù)據(jù)庫(kù)有很多種類(lèi)型,本文對(duì)常用的各大關(guān)系型數(shù)據(jù)庫(kù)(例如:Oracol、SQLSer、mysql等)和非關(guān)系型數(shù)據(jù)庫(kù)(例如:MongoDB、Cassandra、Hadoop HBase等)的優(yōu)勢(shì)和缺點(diǎn)做了詳細(xì)的分類(lèi)分析介紹說(shuō)明2021-08-08
深入SQL截取字符串(substring與patindex)的詳解
本篇文章是對(duì)SQL截取字符串(substring與patindex的使用)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
MSSQLSERVER不同版本設(shè)置開(kāi)啟遠(yuǎn)程連接(sa配置)
這篇文章主要為大家詳細(xì)介紹了MSSQLSERVER不同版本設(shè)置開(kāi)啟遠(yuǎn)程連接,包括SQL SERVER 2008/2012/2012R2/2014開(kāi)啟遠(yuǎn)程連接的設(shè)置方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
SQLServer 數(shù)據(jù)庫(kù)故障修復(fù)頂級(jí)技巧之一
SQL Server 2005 和 2008 有幾個(gè)關(guān)于高可用性的選項(xiàng),如日志傳輸、副本和數(shù)據(jù)庫(kù)鏡像。2010-04-04
sql server 2000阻塞和死鎖問(wèn)題的查看與解決方法
在實(shí)際引用當(dāng)中,數(shù)據(jù)庫(kù)阻塞和死鎖在程序開(kāi)發(fā)過(guò)程經(jīng)常出現(xiàn),下面通過(guò)介紹數(shù)據(jù)庫(kù)阻塞和數(shù)據(jù)庫(kù)死鎖,并提供查看和解決阻塞和死鎖的方法2014-01-01
SQL Server 中調(diào)整自增字段的當(dāng)前初始值
SQL Server 中調(diào)整自增字段的當(dāng)前初始值...2007-01-01
SQLServer數(shù)據(jù)庫(kù)從高版本降級(jí)到低版本實(shí)例詳解
這篇文章主要介紹了SQLServer數(shù)據(jù)庫(kù)從高版本降級(jí)到低版本實(shí)例詳解的相關(guān)資料,在工程項(xiàng)目需要遷移的時(shí)候,偶爾會(huì)用到這樣的知識(shí),需要的朋友可以參考下2016-12-12

