SQL Server 空值處置戰略[推舉]。本站提示廣大學習愛好者:(SQL Server 空值處置戰略[推舉])文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server 空值處置戰略[推舉]正文
文章轉自IT專家網服裝論壇t.vhao.net,作者builder
本文商量了在SQL Server中處置這些值時觸及的3個成績:計數、應用空表值和外鍵處置。 數據完全性是任何數據庫體系要包管的重點。不論體系籌劃得有多好,空數據值的成績老是存在。本文商量了在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
---------------- ------------- -------------- ------------
15 11 3 4 4
適當應用空表值
SQL Server能夠湧現一種特別情形:在援用父表的一個表中,由於不許可空值,所以“聲明援用完全性”(DRI)能夠不會獲得強迫。即便父表不包括空值,在子表援用了父表主鍵束縛或唯一束縛的列中,也能夠包括空值。
假設來自父表的值今朝未知,就不會有任何成績。例如,父表能夠是一個地址表,而子表能夠包括接洽信息。因為很多緣由,能夠臨時不曉得要傳給父表的接洽地址。這是一種基於時光的成績,空值在個中也許是適合的。
以下例所示,我們創立父表,並在個中拔出兩個值。
SET NOCOUNT ON
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
以下代碼則創立子表,並在援用父表的列中拔出一個空值。
CREATE TABLE Child
(pkey1 INT IDENTITYCONSTRAINT pkChild
PRIMARY KEY,Parentpkey1 INT NULLCONSTRAINT fkChildParent
FOREIGN KEYREFERENCES Parent(pkey1),col1 INT NULL)
GOINSERT Child (Parentpkey1, col1) VALUES (null,2)GO
但在以下代碼中,要同時從父表和子表選擇值。固然父表不包括空值,但在子表援用了父表的誰人列中,將許可一個空值。
然後拋棄一切表,消除這個演示所用的數據庫對象。
SELECT * FROM ChildGOSELECT * FROM ParentGODROP TABLE Child, ParentGO
在可認為空的外鍵中檢討數據的有用性
假如由兩個列配合構成主鍵,並且一個子表將主鍵作為可為空值的外鍵來繼續,便可能獲得毛病的數據。可在一個外鍵列中拔出有用的值,但在另外一個外鍵列中拔出空值。然後,可添加一個數據表檢討束縛,在可為空的外鍵中檢討數據的有用性。
任何多列外鍵都能夠碰到異樣的成績。所以,你須要添加一個檢討束縛來檢測異常。最後,檢討束縛將檢討組成外鍵的一切列中能夠為空的值。檢討束縛還要檢討這些列中不克不及為空的值。如兩個檢討都經由過程,成績就處理了。
以下示范劇本展現了如許的一個異常,和若何用檢討束縛來改正它。
空值是一切數據庫開辟者和治理員都要碰到的。所以,要想開辟勝利的運用法式,必需曉得若何處置這些值。本文和你分享了空值處置的一些技能和技巧。