程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server數據庫中處理空值時常見問題

SQL Server數據庫中處理空值時常見問題

編輯:關於SqlServer

數據完整性是任何數據庫系統要保證的重點。不管系統計劃得有多好,空數據值的問題總是存在。本文探討了在SQL Server中處理這些值時涉及的3個問題:計數、使用空表值以及外鍵處理。

 

用COUNT(*)處理空值

 

大多數集合函數都能在計算時消除空值;COUNT函數則屬於例外。對包含空值的一個列使用COUNT函數,空值會從計算中消除。但假如COUNT函數使用一個星號,它就計算所有行,而不管是否存在空值。

 

如果希望COUNT函數對給定列的所有行(包括空值)進行計數,請使用ISNULL函數。ISNULL函數會將空值替換成有效的值。

 

事實上,對集合函數來說,如果空值可能導致錯誤結果,ISNULL函數就非常有用。記住在使用一個星號時,COUNT函數會對所有行進行計算。下例演示了空值在AVG和COUNT集合函數中的影響:

 

SET NOCOUNT ON            GO            CREATE TABLE xCount            (pkey1 INT IDENTITY NOT NULL            CONSTRAINT pk_xCount PRIMARY KEY,            Col1 int NULL)            GO            INSERT xCount (Col1) VALUES (10)            GO            INSERT xCount (Col1) VALUES (15)            GO            INSERT xCount (Col1) VALUES (20)            GO            INSERT xCount (Col1) VALUES (NULL)            GO            SELECT AVG(Col1) AvgWithoutIsNullFunctionOnCol1,            AVG(ISNULL(Col1,0)) AvgWithIsNullFunctionOnCol1,            COUNT(Col1) NoIsNullFunctionOnCol1 ,            COUNT(ISNULL(Col1,0)) UsingIsNullFunctionOnCol1,            Count(*) UsingAsterisk            FROM xCount            GO            DROP TABLE xCount            GO            OUTPUT:            AvgWOIsNullFnctnCol1 AvgWIsNullFnctnCol1            WOIsNullFnctnCol1            WIsNullFnctnCol1 UsingAsterisk            ---------------- ------------- --------------

恰當使用空表值

 

SQL Server可能出現一種特殊情況:在引用父表的一個表中,因為不允許空值,所以“聲明引用完整性”(DRI)可能不會得到強制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved