最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2009年08月05日 23:05:32   作者:  
數(shù)據(jù)完整性是任何數(shù)據(jù)庫系統(tǒng)要保證的重點(diǎn)。不管系統(tǒng)計(jì)劃得有多好,空數(shù)據(jù)值的問題總是存在。
文章轉(zhuǎn)自IT專家網(wǎng)論壇,作者builder
本文探討了在SQL Server中處理這些值時(shí)涉及的3個(gè)問題:計(jì)數(shù)、使用空表值以及外鍵處理。  數(shù)據(jù)完整性是任何數(shù)據(jù)庫系統(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ù),請使用ISNULL函數(shù)。ISNULL函數(shù)會(huì)將空值替換成有效的值。
  事實(shí)上,對(duì)集合函數(shù)來說,如果空值可能導(dǎo)致錯(cuò)誤結(jié)果,ISNULL函數(shù)就非常有用。記住在使用一個(gè)星號(hào)時(shí),COUNT函數(shù)會(huì)對(duì)所有行進(jìn)行計(jì)算。下例演示了空值在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)一種特殊情況:在引用父表的一個(gè)表中,因?yàn)椴辉试S空值,所以“聲明引用完整性”(DRI)可能不會(huì)得到強(qiáng)制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。
假如來自父表的值目前未知,就不會(huì)有任何問題。例如,父表可能是一個(gè)地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時(shí)不知道要傳給父表的聯(lián)系地址。這是一種基于時(shí)間的問題,空值在其中或許是合適的。
  如下例所示,我們創(chuàng)建父表,并在其中插入兩個(gè)值。
復(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)建子表,并在引用父表的列中插入一個(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ù)庫對(duì)象。
  SELECT * FROM ChildGOSELECT * FROM ParentGODROP TABLE Child, ParentGO
  在可以為空的外鍵中檢查數(shù)據(jù)的有效性
  如果由兩個(gè)列共同組成主鍵,而且一個(gè)子表將主鍵作為可為空值的外鍵來繼承,就可能得到錯(cuò)誤的數(shù)據(jù)。可在一個(gè)外鍵列中插入有效的值,但在另一個(gè)外鍵列中插入空值。然后,可添加一個(gè)數(shù)據(jù)表檢查約束,在可為空的外鍵中檢查數(shù)據(jù)的有效性。
  任何多列外鍵都可能遇到同樣的問題。所以,你需要添加一個(gè)檢查約束來檢測異常。最初,檢查約束將檢查構(gòu)成外鍵的所有列中可能為空的值。檢查約束還要檢查這些列中不能為空的值。如兩個(gè)檢查都通過,問題就解決了。
  以下示范腳本展示了這樣的一個(gè)異常,以及如何用檢查約束來糾正它。

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

相關(guān)文章

  • SQL之CASE WHEN用法小結(jié)

    SQL之CASE WHEN用法小結(jié)

    CASE WHEN語句通常用于根據(jù)條件執(zhí)行不同的操作,本文主要介紹了SQL之CASE WHEN用法小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Windows開啟SQL?Server服務(wù)及1433端口詳細(xì)教程

    Windows開啟SQL?Server服務(wù)及1433端口詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于Windows開啟SQL?Server服務(wù)及1433端口的相關(guān)資料,通常端口值是1433,因?yàn)?433是sql server 2000的對(duì)于Tcp/IP的默認(rèn)偵聽端口,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • SQL SERVER 2000 9003錯(cuò)誤的解決方法(只適用于SQL2000)

    SQL SERVER 2000 9003錯(cuò)誤的解決方法(只適用于SQL2000)

    "無法打開新數(shù)據(jù)庫 'POS'。CREATE DATABASE 中止。 (Microsoft SQL Server,錯(cuò)誤: 9003)"看是9003錯(cuò)誤,怎么解決呢,下面小編給大家分享SQL SERVER 2000 9003錯(cuò)誤的解決方法(只適用于SQL2000),一起看看吧
    2016-09-09
  • SQL學(xué)習(xí)筆記一SQL基礎(chǔ)知識(shí)

    SQL學(xué)習(xí)筆記一SQL基礎(chǔ)知識(shí)

    剛開始接觸sqlserver的朋友可以參考下。雖然文字比較短,但內(nèi)容都是經(jīng)驗(yàn)之談。
    2011-08-08
  • SqlServer系統(tǒng)數(shù)據(jù)庫的作用深入了解

    SqlServer系統(tǒng)數(shù)據(jù)庫的作用深入了解

    至于SqlServer系統(tǒng)數(shù)據(jù)庫的作用可以從以下幾個(gè)部分介紹下:Master/Model/Tempdb/Distribution/Msdb;感興趣的你可以參考下哦,不妨可以充充電了
    2013-02-02
  • SQL Server 數(shù)據(jù)庫中的收縮數(shù)據(jù)庫和文件操作

    SQL Server 數(shù)據(jù)庫中的收縮數(shù)據(jù)庫和文件操作

    收縮數(shù)據(jù)文件通過將數(shù)據(jù)頁從文件末尾移動(dòng)到更靠近文件開頭的未占用的空間來恢復(fù)空間,在文件末尾創(chuàng)建足夠的空間后,可取消對(duì)文件末尾的數(shù)據(jù)頁的分配并將它們返回給文件系統(tǒng),本文給大家介紹SQL Server 數(shù)據(jù)庫中的收縮數(shù)據(jù)庫和文件的相關(guān)知識(shí),一起看看吧
    2023-07-07
  • SQL Server視圖的更新排查及清除緩存的操作方法

    SQL Server視圖的更新排查及清除緩存的操作方法

    文章主要介紹了在SQLServer中遇到視圖結(jié)構(gòu)與實(shí)際表結(jié)構(gòu)不一致的問題,并提供了三種解決方案:刷新視圖、清空執(zhí)行計(jì)劃緩存和清空數(shù)據(jù)緩存,每種方法都有其適用場景和注意事項(xiàng),需要的朋友可以參考下
    2025-02-02
  • SqlServer中批量update語句

    SqlServer中批量update語句

    我現(xiàn)在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT,那么就可以參考下面的語句,要找到對(duì)應(yīng)的字段
    2019-11-11
  • MySql更新優(yōu)化策略

    MySql更新優(yōu)化策略

    數(shù)據(jù)庫優(yōu)化是一項(xiàng)很復(fù)雜的工作,因?yàn)檫@關(guān)系到對(duì)系統(tǒng)優(yōu)化的理解。mysql更新優(yōu)化是程序員必掌握的知識(shí),這篇文章主要介紹mysql更新優(yōu)化的策略,需要的朋友可以參考下
    2015-08-08
  • 詳解SQL Server的聚焦過濾索引

    詳解SQL Server的聚焦過濾索引

    本文主要講解了通過過濾索引來提高查詢性能,同時(shí)也給出了其不同的場景以及其使用優(yōu)點(diǎn)和明顯的缺點(diǎn)。簡短的內(nèi)容,深入的理解,有興趣的朋友可以看下
    2016-12-12

最新評(píng)論

乌恰县| 古丈县| 皮山县| 馆陶县| 青海省| 宿迁市| 轮台县| 信阳市| 通渭县| 舒城县| 麻城市| 昌宁县| 肇庆市| 常熟市| 永春县| 福鼎市| 安国市| 漾濞| 和田市| 南充市| 元朗区| 松溪县| 长宁区| 凉山| 油尖旺区| 西乡县| 平和县| 报价| 西乌| 晋宁县| 明水县| 高密市| 邵阳县| 武清区| 安泽县| 富顺县| 东辽县| 临颍县| 宁乡县| 长沙县| 长乐市|