国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SQL Server的空值處理策略

瀏覽:105日期:2023-10-29 07:48:36
數(shù)據(jù)完整性是任何數(shù)據(jù)庫(kù)系統(tǒng)要保證的重點(diǎn)。不管系統(tǒng)計(jì)劃得有多好,空數(shù)據(jù)值的問(wèn)題總是存在。本文探討了在SQL Server中處理這些值時(shí)涉及的3個(gè)問(wèn)題:計(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 GOOUTPUT:AvgWOIsNullFnctnCol1 AvgWIsNullFnctnCol1 WOIsNullFnctnCol1WIsNullFnctnCol1 UsingAsterisk ---------------- ------------- -------------- ------------ ---------15;;;;;1134;4

恰當(dāng)使用空表值

SQL Server可能出現(xiàn)一種特殊情況:在引用父表的一個(gè)表中,因?yàn)椴辉试S空值,所以“聲明引用完整性”(DRI)可能不會(huì)得到強(qiáng)制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。

假如來(lái)自父表的值目前未知,就不會(huì)有任何問(wèn)題。例如,父表可能是一個(gè)地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時(shí)不知道要傳給父表的聯(lián)系地址。這是一種基于時(shí)間的問(wèn)題,空值在其中或許是合適的。

如下例所示,我們創(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

在可以為空的外鍵中檢查數(shù)據(jù)的有效性

如果由兩個(gè)列共同組成主鍵,而且一個(gè)子表將主鍵作為可為空值的外鍵來(lái)繼承,就可能得到錯(cuò)誤的數(shù)據(jù)。可在一個(gè)外鍵列中插入有效的值,但在另一個(gè)外鍵列中插入空值。然后,可添加一個(gè)數(shù)據(jù)表檢查約束,在可為空的外鍵中檢查數(shù)據(jù)的有效性。

任何多列外鍵都可能遇到同樣的問(wèn)題。所以,你需要添加一個(gè)檢查約束來(lái)檢測(cè)異常。最初,檢查約束將檢查構(gòu)成外鍵的所有列中可能為空的值。檢查約束還要檢查這些列中不能為空的值。如兩個(gè)檢查都通過(guò),問(wèn)題就解決了。

以下示范腳本展示了這樣的一個(gè)異常,以及如何用檢查約束來(lái)糾正它。

SET NOCOUNT ONGOCREATE TABLE parent (pkey1 INT IDENTITY NOT NULL, pkey2 INTNOT NULL, col1 INT NULL,CONSTRAINT pk_parent PRIMARY KEY NONCLUSTERED ( pkey1, pkey2))GOINSERT parent (pkey2) VALUES ( 2 )INSERT parent (pkey2) VALUES ( 85 )INSERT parent (pkey2) VALUES ( 41 )INSERT parent (pkey2) VALUES ( 11 )GOSELECT * FROM parentGOCREATE TABLE child (cpkey1 INT IDENTITY NOT NULLCONSTRAINT pk_child PRIMARY KEY NONCLUSTERED (cpkey1),pkey1 INT NULL, pkey2 INT NULL, col1 INT NULL,CONSTRAINT fk_parent_child FOREIGN KEY (pkey1, pkey2)REFERENCES parent (pkey1, pkey2))GOINSERT child (pkey1, pkey2) VALUES ( null, 85 )GOSELECT * FROM childGODELETE childGOALTER TABLE child WITH NOCHECKADD CONSTRAINT ck_fk_parent_child CHECK((pkey1 IS NOT NULL AND pkey2 IS NOT NULL) OR(pkey1 IS NULL AND pkey2 IS NULL) )GOINSERT child (pkey1, pkey2) VALUES ( null, 11 )GODROP TABLE child, parentGO

空值是所有數(shù)據(jù)庫(kù)開發(fā)者和管理員都要遇到的。所以,要想開發(fā)成功的應(yīng)用程序,必須知道如何處理這些值。本文和你分享了空值處理的一些技巧和技術(shù)。

主站蜘蛛池模板: 亚洲 中文 欧美 日韩 在线人 | 国产日b视频| 国产欧美日韩在线一区二区不卡 | 亚洲精品欧美精品一区二区 | 成人免费视频网站 | 亚洲精品成人网久久久久久 | 怡红院免费全部视频在线 | 久久久久久综合成人精品 | 精品精品国产高清a毛片 | 欧洲乱码伦视频免费 | 亚洲va中文字幕欧美不卡 | 亚洲品质自拍视频 | 国产免费资源 | 欧美性性性性性色大片免费的 | 国产欧美一区二区三区精品 | 国产欧美日韩不卡一区二区三区 | 在线一区国产 | 国产日韩精品一区二区在线观看 | 99久久免费精品国产免费 | 国产精品18久久久久久久久久 | 日韩精品久久久久久 | 99在线观看 | 亚洲 欧美 激情 另类 校园 | 日韩大片高清播放器大全 | 国产麻豆入在线观看 | 欧美一级毛片在线看视频 | 日本一区二区三区四区五区 | 成人午夜在线观看国产 | 亚洲天堂国产 | 欧美大尺度免费一级特黄 | 88av视频| 最新国产三级在线不卡视频 | 久久91精品国产一区二区 | 国产精品1区 | 白嫩美女一级毛片免费看 | 免费一级毛片无毒不卡 | 99视频国产热精品视频 | 四虎免费大片aⅴ入口 | 亚洲在线第一页 | 欧美精品伊人久久 | 国产三a级日本三级日产三级 |