SQL Server中ISNULL函数个人总结
寫這篇博客主要是最近在做項目的時候碰到了一個很奇怪的現象:執行了一個存儲過程,返回結果大概有3000行左右,但卻用了40幾秒的時間,實在讓我很郁悶,于是我詳細看了下腳本,經過多次的修改測試以后,居然發現是因為在WHERE子句中使用了ISNULL函數,這個還不是最關鍵的,關鍵是我居然給對一個不可能為NULL的參數進行了NULL值判斷(也就是使用了ISNULL函數),然后我把這些不必要的ISNULL函數去掉以后,再次執行之后返回結果就只用了0秒,經過思考后我才發現,對一個不可能為NULL的參數進行判斷就好比是畫蛇添足,經過思考后,對ISNULL函數總結了以下幾點:
1.在給變量賦值的時候不需要ISNULL的判斷,應該在計算時使用到該變量的時候再加上ISNULL的判斷
select@OldMQuan=ISNULL(MQuan,0),@OldPQuan=ISNULL(AQuantity,0)
fromTableName
whereId=ISNULL(@Id,0)
這里的ISNULL(MQuan,0)和ISNULL(AQuantity,0)完全是可以省略掉的,
而在使用的時候應該加上,如下:
updateTableName
setRQuan=isnull(RQuan,0)-isnull(@OldPQuan,0)+isnull(@OldMQuan,0)
whereId=ISNULL(@Id,0)
2.WHERE子句中應避免使用ISNULL等函數,應該在存儲過程開始時就對參數進行ISNULL的判斷
如下:
updateTableName
setRQuan=isnull(RQuan,0)-isnull(@OldPQuan,0)+isnull(@OldMQuan,0)
whereId=ISNULL(@Id,0)
可以改為在存儲過程剛開始的就對參數進行NULL值判斷,接著在下面的腳本中就可以直接使用該變量,而不用再重復多次去判斷參數NULL值得情況了:
上面的就可以改為如下的寫法:
set@Id=ISNULL(@Id,0)
updateTableName
setRQuan=isnull(RQuan,0)-isnull(@OldPQuan,0)+isnull(@OldMQuan,0)
whereId=@Id
3WHERE子句中ISNULL()的使用,讓該表達式等同于1=1,使其失效的處理方式優化:
DECLARE @myID INT
SET @myID=NULL
SELECT * FROM TABLENAME
WHERE ID=ISNULL(@myID,ID)
AND ... AND .....
處理方法:
where id=isnull(@myid,id)改為
where (@myid is not null and id=@myid) or (@myid is null)
4.UPDATE更新數量的時候需要對數量進行運算時需判斷數據庫表中字段的值是否為NULL值:
updateTableName
setCQuan=ISNULL(CQuan,0)-ISNULL(@MQuan,0)
whereid=@idandISNULL(CQuan,0)-ISNULL(@Quan,0)>=0
如果上面語句中在表當中這個CQuan字段定義為可空的話,就需要加上ISNULL(CQuan,0)這個判斷了
同時還應該加上()以區分表達式的范圍,如下:
updateTableName
setCQuan=ISNULL(CQuan,0)-ISNULL(@MQuan,0)
whereid=@idand(ISNULL(CQuan,0)-ISNULL(@Quan,0))>=0
總結
以上是生活随笔為你收集整理的SQL Server中ISNULL函数个人总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经期注意事项(女性月经期间应当注意啥?)
- 下一篇: 好听的网络游戏名字(什么名字好听游戏)