談SQL Server的空值處理策略_Mssql數(shù)據(jù)庫(kù)教程
推薦:怎樣用VB存取SQL Server中的圖像數(shù)據(jù)本文介紹MIS SQL Server對(duì)圖像數(shù)據(jù)的存儲(chǔ)機(jī)制和存取方法。針對(duì)VB開發(fā)工具,介紹了一種通過(guò)ADO Field 對(duì)象的GetChunk 方法和AppendChunk 方法來(lái)存取MIS SQL Server中的圖像數(shù)據(jù)的方法。 在一個(gè)完善的醫(yī)院信息MIS中,圖像數(shù)據(jù)的存取是必不可少的,比如X光片、C
數(shù)據(jù)完整性是任何數(shù)據(jù)庫(kù)系統(tǒng)要保證的重點(diǎn)。不管系統(tǒng)計(jì)劃得有多好,空數(shù)據(jù)值的問題總是存在。本文探討了在SQL Server中處理這些值時(shí)涉及的3個(gè)問題:計(jì)數(shù)、使用空表值以及外鍵處理。
用COUNT(*)處理空值
大多數(shù)集合函數(shù)都能在計(jì)算時(shí)消除空值;COUNT函數(shù)則屬于例外。對(duì)包含空值的一個(gè)列使用COUNT函數(shù),空值會(huì)從計(jì)算中消除。但假如COUNT函數(shù)使用一個(gè)星號(hào),它就計(jì)算所有行,而不管是否存在空值。
如果希望COUNT函數(shù)對(duì)給定列的所有行(包括空值)進(jìn)行計(jì)數(shù),請(qǐng)使用ISNULL函數(shù)。ISNULL函數(shù)會(huì)將空值替換成有效的值。
事實(shí)上,對(duì)集合函數(shù)來(lái)說(shuō),如果空值可能導(dǎo)致錯(cuò)誤結(jié)果,ISNULL函數(shù)就非常有用。記住在使用一個(gè)星號(hào)時(shí),COUNT函數(shù)會(huì)對(duì)所有行進(jìn)行計(jì)算。下例演示了空值在AVG和COUNT集合函數(shù)中的影響:
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
恰當(dāng)使用空表值
SQL Server可能出現(xiàn)一種特殊情況:在引用父表的一個(gè)表中,因?yàn)椴辉试S空值,所以“聲明引用完整性”(DRI)可能不會(huì)得到強(qiáng)制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。
假如來(lái)自父表的值目前未知,就不會(huì)有任何問題。例如,父表可能是一個(gè)地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時(shí)不知道要傳給父表的聯(lián)系地址。這是一種基于時(shí)間的問題,空值在其中或許是合適的。
如下例所示,我們創(chuàng)建父表,并在其中插入兩個(gè)值。
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
以下代碼則創(chuàng)建子表,并在引用父表的列中插入一個(gè)空值。
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
但在以下代碼中,要同時(shí)從父表和子表選擇值。雖然父表不包含空值,但在子表引用了父表的那個(gè)列中,將允許一個(gè)空值。
然后丟棄所有表,清除這個(gè)演示所用的數(shù)據(jù)庫(kù)對(duì)象。
SELECT * FROM ChildGOSELECT * FROM ParentGODROP TABLE Child, ParentGO
分享:淺談SQL Server數(shù)據(jù)倉(cāng)庫(kù)相關(guān)概念及構(gòu)建流程基本概念: 1.多維數(shù)據(jù)集:多維數(shù)據(jù)集是聯(lián)機(jī)分析處理 (OLAP) 中的主要對(duì)象,是一項(xiàng)可對(duì)數(shù)據(jù)倉(cāng)庫(kù)中的數(shù)據(jù)進(jìn)行快速訪問的技術(shù)。多維數(shù)據(jù)集是一個(gè)數(shù)據(jù)集合,通常從數(shù)據(jù)倉(cāng)庫(kù)的子集構(gòu)造,并組織和匯總成一個(gè)由一組維度和度量值定義的多維結(jié)構(gòu)。 2.維度:是多維數(shù)
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 解讀史上最簡(jiǎn)單的方法復(fù)制或遷移Oracle數(shù)據(jù)庫(kù)
- Sql2005如何用dtexec運(yùn)行ssis(DTS)包
- Sql Server中的日期與時(shí)間函數(shù)
- 清理SQL Server 2008日志文件Cannot shrink log file 2 的解決方案
- sql 游標(biāo)的使用—游標(biāo)FOR循環(huán)小例子
- 教你幾個(gè)MySQL鮮為人知特殊技巧
- 刪除數(shù)據(jù)庫(kù)中重復(fù)數(shù)據(jù)的幾個(gè)方法
- SQL2005數(shù)據(jù)庫(kù)轉(zhuǎn)到SQL2000的步驟
- sql2005 數(shù)據(jù)庫(kù)轉(zhuǎn)為sql2000數(shù)據(jù)庫(kù)的方法(數(shù)據(jù)導(dǎo)出導(dǎo)入)
- 用SQL Server Having計(jì)算列和平均值
猜你也喜歡看這些
- 更新text字段時(shí)出現(xiàn)Row size too large報(bào)錯(cuò)應(yīng)付措施
- MySQL筆記之系統(tǒng)信息函數(shù)詳解
- mysql5.6.10安裝詳細(xì)圖文教程
- CentOS6.3安裝MySQL5.6.10并修改MySQL的root用戶密碼
- mysql 將列值轉(zhuǎn)變?yōu)榱械姆椒?/a>
- MySQL為什么會(huì)索引失效?
- mysql錯(cuò)誤及解決全攻略
- 基于unique與primary約束的區(qū)別分析
- MySQL筆記之函數(shù)查詢的使用
- MySQL數(shù)據(jù)庫(kù)INSERT、UPDATE、DELETE以及REPLACE語(yǔ)句的用法詳解
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-談SQL Server的空值處理策略
。