這篇文章主要介紹了在SQL Server中處理空值時所涉及的3個問題:計數(shù)、使用空表值以及外鍵處理。
用COUNT(*)處理空值
大多數(shù)集合函數(shù)都能在計算時消除空值;COUNT函數(shù)則屬于例外。對包含空值的一個列使用COUNT函數(shù),空值會從計算中消除。但假如COUNT函數(shù)使用一個星號,它就計算所有行,而不管是否存在空值。
如果希望COUNT函數(shù)對給定列的所有行(包括空值)進(jìn)行計數(shù),請使用ISNULL函數(shù)。ISNULL函數(shù)會將空值替換成有效的值。
事實(shí)上,對集合函數(shù)來說,如果空值可能導(dǎo)致錯誤結(jié)果,ISNULL函數(shù)就非常有用。記住在使用一個星號時,COUNT函數(shù)會對所有行進(jìn)行計算。下例演示了空值在AVG和COUNT集合函數(shù)中的影響:
| 以下為引用的內(nèi)容: SET NOCOUNT ON GO WIsNullFnctnCol1 UsingAsterisk ---------------- ------------- -------------- ------------ 15 11 3 4 4 |
恰當(dāng)使用空表值
SQL Server可能出現(xiàn)一種特殊情況:在引用父表的一個表中,因?yàn)椴辉试S空值,所以“聲明引用完整性”(DRI)可能不會得到強(qiáng)制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。
假如來自父表的值目前未知,就不會有任何問題。例如,父表可能是一個地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時不知道要傳給父表的聯(lián)系地址。這是一種基于時間的問題,空值在其中或許是合適的。
如下例所示,我們創(chuàng)建父表,并在其中插入兩個值。
| 以下為引用的內(nèi)容:
GOCREATE TABLE Parent(pkey1 INT IDENTITY NOT NULL CONSTRAINT pkParent PRIMARY KEY,col1 INT NULL)GOINSERT Parent (col1) VALUES (284)GOINSERT Parent (col1) VALUES (326)GO |
新聞熱點(diǎn)
疑難解答
圖片精選