一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - SQL Server 空值處理策略[推薦]

SQL Server 空值處理策略[推薦]

2019-11-13 14:47IT專家網(wǎng)論壇builder Sql Server

數(shù)據(jù)完整性是任何數(shù)據(jù)庫系統(tǒng)要保證的重點。不管系統(tǒng)計劃得有多好,空數(shù)據(jù)值的問題總是存在。

本文探討了在SQL Server中處理這些值時涉及的3個問題:計數(shù)、使用空表值以及外鍵處理。  數(shù)據(jù)完整性是任何數(shù)據(jù)庫系統(tǒng)要保證的重點。不管系統(tǒng)計劃得有多好,空數(shù)據(jù)值的問題總是存在。本文探討了在SQL Server中處理這些值時涉及的3個問題:計數(shù)、使用空表值以及外鍵處理。 
用COUNT(*)處理空值 
  大多數(shù)集合函數(shù)都能在計算時消除空值;COUNT函數(shù)則屬于例外。對包含空值的一個列使用COUNT函數(shù),空值會從計算中消除。但假如COUNT函數(shù)使用一個星號,它就計算所有行,而不管是否存在空值。 
  如果希望COUNT函數(shù)對給定列的所有行(包括空值)進行計數(shù),請使用ISNULL函數(shù)。ISNULL函數(shù)會將空值替換成有效的值。 
  事實上,對集合函數(shù)來說,如果空值可能導(dǎo)致錯誤結(jié)果,ISNULL函數(shù)就非常有用。記住在使用一個星號時,COUNT函數(shù)會對所有行進行計算。下例演示了空值在AVG和COUNT集合函數(shù)中的影響: 

復(fù)制代碼代碼如下:


  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)一種特殊情況:在引用父表的一個表中,因為不允許空值,所以“聲明引用完整性”(DRI)可能不會得到強制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。 
假如來自父表的值目前未知,就不會有任何問題。例如,父表可能是一個地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時不知道要傳給父表的聯(lián)系地址。這是一種基于時間的問題,空值在其中或許是合適的。 
  如下例所示,我們創(chuàng)建父表,并在其中插入兩個值。 

復(fù)制代碼代碼如下:


  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)建子表,并在引用父表的列中插入一個空值。 
  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ù)據(jù)庫對象。 
  SELECT * FROM ChildGOSELECT * FROM ParentGODROP TABLE Child, ParentGO 
  在可以為空的外鍵中檢查數(shù)據(jù)的有效性 
  如果由兩個列共同組成主鍵,而且一個子表將主鍵作為可為空值的外鍵來繼承,就可能得到錯誤的數(shù)據(jù)。可在一個外鍵列中插入有效的值,但在另一個外鍵列中插入空值。然后,可添加一個數(shù)據(jù)表檢查約束,在可為空的外鍵中檢查數(shù)據(jù)的有效性。 
  任何多列外鍵都可能遇到同樣的問題。所以,你需要添加一個檢查約束來檢測異常。最初,檢查約束將檢查構(gòu)成外鍵的所有列中可能為空的值。檢查約束還要檢查這些列中不能為空的值。如兩個檢查都通過,問題就解決了。 
  以下示范腳本展示了這樣的一個異常,以及如何用檢查約束來糾正它。 
SQL Server 空值處理策略[推薦]
  空值是所有數(shù)據(jù)庫開發(fā)者和管理員都要遇到的。所以,要想開發(fā)成功的應(yīng)用程序,必須知道如何處理這些值。本文和你分享了空值處理的一些技巧和技術(shù)。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 饭冈加奈子黑人解禁在线播放 | 亚洲高清视频免费 | 亚洲高清中文字幕精品不卡 | 国产精品嫩草影院一二三区 | 古装一级无遮挡毛片免费观看 | 久久水蜜桃亚洲AV无码精品偷窥 | 国产情侣偷国语对白 | 青青国产成人久久激情91麻豆 | ipx-177绝对领域在线观看 | 久久精品亚洲国产AV涩情 | 奇米影视久久777中文字幕 | 国产a一级毛片午夜剧院 | 国产精品久热 | 91会员| 国产区成人精品视频 | 91九色国产porny | 四虎最新永久免费视频 | 婷婷丁香色综合狠狠色 | 男女男在线精品网站免费观看 | 国内精品一区视频在线播放 | 日韩一级生活片 | 操破苍穹小说 | 三上悠亚国产精品一区 | 亚洲视频第一页 | 深夜视频在线播放 | 日韩亚洲人成网站在线播放 | 欧美图片另类小说综合 | 欧美日韩在线一区二区三区 | 日本三级免费网站 | 波多野结衣之高校教师 | 久久水蜜桃亚洲AV无码精品偷窥 | 色呦呦tv| 国产xxxxxx久色视频在 | 白丝美女用胸伺候主人 | 国产欧美成人不卡视频 | 亚洲精品国产在线 | 狠狠燥| 毛片影院 | 欧美一级视频在线观看 | 久久精品动漫网一区二区 | 国产毛片一级aaaaa片 |