SQL?Server?ISNULL?不生效原因及解決
SQL Server ISNULL 不生效原因
數據庫:SQL Server 2008 R2
原始SQL:historyval 字段沒有數據顯示為NULL,用ISNULL判斷為NULL的時候替換為 0.0
SELECT ?? ?ISNULL(historyval, 0.0) FROM ?? ?ce_bf_l_energyh_t_2 WHERE ?? ?tagname = '123'
問題
用ISNULL只后數據依舊為NULL并沒有替換掉。
原因
ISNULL只作用于查詢出數據后字段為NULL可以替換生效、如果查詢的時候這條數據本身為NULL、字段替換時ISNULL則不生效。
解決方法
先用 if exists(結果集)判斷這條數據是否存在(也就是說這條select這條sql有沒有結果集),BEGIN 表示語句塊的開始;END 表示語句塊的結束(加不加 BEGIN END 代碼塊都可以)。
如果滿足條件直接在下方寫 SQL。
不滿足條件時,則在 ELSE 下方寫 SQL。如此,數據進行了替換。
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 真是個坑,CPU飆升90% +
- table1大概1100多萬數據
- table2大概80多萬數據
MES系統(tǒng),使用了以下SQL語句,并且這個語句每分鐘終端會并發(fā)執(zhí)行一次(大概30個客戶端)
SELECT ? ? AA.id? FROM ? ?table1 aa ? ? LEFT JOIN table2 ?bb ON bb.No= aa.No? WHERE
--就下面這句,把服務器CPU干到90%多
isnull( aa.fanCode,'0')!='0'?
修改為 :aa.fanCode IS NOT NULL 后CPU回到個位數。
總結:盡量少用isnull()函數,就算用也盡量不用在where后面。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
用SQL語句添加刪除修改字段、一些表與字段的基本操作、數據庫備份等
用SQL語句添加刪除修改字段、一些表與字段的基本操作、數據庫備份等,需要的朋友可以參考下。2011-11-11Sql Server中一個表2個字段關聯(lián)同一個表(代碼解決)
Sql Server中一個表2個字段關聯(lián)同一個表(代碼解決),需要的朋友可以參考一下2013-02-02MS SQL Server2014鏈接到MS SQL Server 2000的解決方案及問題處理
在大數據中,我們經常需要用到分布式數據,那么在SqlServer中,我們如何來實現(xiàn)呢,答案就是創(chuàng)建鏈接服務器!同版本的SqlServer之間的操作網上有很多,今天我們來探討下不同版本SqlServer之間的鏈接問題。2014-07-07ASP.NET下向SQLServer2008導入文件實例操作方法
在Microsoft SQL Server2008以后的版本中,將刪除image數據類型。在新的開發(fā)工作中將不適用此數據類型,并打算修改當前使用此數據類型的應用程序,改用varbinary(max)數據類型。2010-09-09