日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

SQL Server中ISNULL函数个人总结

發布時間:2024/6/21 综合教程 41 生活家
生活随笔 收集整理的這篇文章主要介紹了 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=@idandISNULL(CQuan,0)-ISNULL(@Quan,0)>=0

總結

以上是生活随笔為你收集整理的SQL Server中ISNULL函数个人总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。