SQL Server中 NULL資料概述

來源:互聯網
上載者:User

在Sql Server中當使用者比較函數或資料函數中時, NULL可能會存在些問題,能夠導致無法預測的結果.

首先說下NULL和數學

1 如果NULL出現在任何SQL數學中,則結果總是NULL.

下面示範一個執行個體 .

 

查詢三個表的資料,並且要求卡號是UserID= 2, 還是未結賬狀態的.並且將得到的資料相加

 

下面是預存程序中的事務代碼

 

ALTERPROCEDURE[dbo].[PROC_CheckBill]

   -- Add the parameters for the stored procedure here

   @userIDvarchar(15)

AS

BEGIN

   -- SET NOCOUNT ON added to prevent extra result sets from

   -- interfering with SELECT statements.

   SETNOCOUNTON;

  beginTran--開始事務

    selectCOUNT(cardID)as'售卡張數'fromT_StudentInfowhereuserID=@userIDandidentify='未結賬'

    selectCOUNT(cardID)as'退卡張數',COALESCE(sum(cancelCash),0)as'退卡金額'fromT_CancelwhereuserID=@userIDandstatue='未結賬'

   selectcoalesce(sum(addMoney),0)as'儲值金額'fromT_Rechargewhere
userID =@userIDandstatue='未結賬'

 

   updateT_StudentInfo setidentify='已結賬'whereuserID=@userIDandidentify='未結賬'

   updateT_Cancelsetstatue
='已結賬'whereuserID=@userIDandstatue='未結賬'

   updateT_Rechargesetstatue
='已結賬'whereuserID=@userIDandstatue='未結賬'

   declare@RegionErrorint

   select@RegionError=@@ERROR--每執行完一條t-sql語句馬上進行檢測,並把錯誤號碼儲存到局部變數中

  

   if
(@RegionError
=0) --判斷如果兩條語句都執行成功

   commitTran--執行事務

   else

   ROLLBACKTran--復原事務

END

 

想象一個下,我們查詢儲值金額,如果查到的資料是0
或具體的數字
,那麼它相加後返回的結果也應該是0或具體數字才對

呢. 

而實際得到的結果卻不是我們想要的

 

 

 

執行儲存過充後

 

 

我們看到執行後儲值金額的傳回值是NULL,這個值是無法進行數學相加的。

這就是NUlL表示的未知資料,而不是任意特定值

 

因此我們要特別注意NULL的處理,尤其是在數學中。確保返回的值不是NULL。為瞭解決這個問題,可以選擇過濾到NULL結果。或是使用一個函數將NULL值改為終端使用者能理解的東西。

 

這裡COALESCE()函數就是很好的作用

 

COALESCE
:返回其參數中第一個非空運算式。

文法

COALESCE ( expression [ ,...n ] )

參數

expression

任何類型的運算式。

n

表示可以指定多個運算式的預留位置。所有運算式必須是相同類型,或者可以隱性轉換為相同的類型。

 

傳回型別

將相同的值作為 expression返回。

注釋

如果所有自變數均為 NULL,則 COALESCE返回
NULL值

 

所以以上的錯誤修改方式是在求和前加上這個函數

select coalesce(sum(addMoney),0) as '儲值金額' from T_Recharge where userID =@userID and statue
='未結賬'

 

 

 

到這裡這個問題就完成解決了。下篇部落格繼續講述NULL的用法,再述NULL

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.