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

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

 更新時(shí)間:2009年08月05日 23:05:32   作者:  
數(shù)據(jù)完整性是任何數(shù)據(jù)庫(kù)系統(tǒng)要保證的重點(diǎn)。不管系統(tǒng)計(jì)劃得有多好,空數(shù)據(jù)值的問(wèn)題總是存在。
文章轉(zhuǎn)自IT專家網(wǎng)論壇,作者builder
本文探討了在SQL Server中處理這些值時(shí)涉及的3個(gè)問(wèn)題:計(jì)數(shù)、使用空表值以及外鍵處理。  數(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ù)中的影響:
復(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)制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。
假如來(lái)自父表的值目前未知,就不會(huì)有任何問(wèn)題。例如,父表可能是一個(gè)地址表,而子表可能包含聯(lián)系信息。由于許多原因,可能暫時(shí)不知道要傳給父表的聯(lián)系地址。這是一種基于時(shí)間的問(wèn)題,空值在其中或許是合適的。
  如下例所示,我們創(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ù)庫(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)糾正它。

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

相關(guān)文章

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

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

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

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

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

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

    "無(wú)法打開(kāi)新數(shù)據(jù)庫(kù) '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í)

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

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

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

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

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

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

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

    SqlServer中批量update語(yǔ)句

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

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

    數(shù)據(jù)庫(kù)優(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的聚焦過(guò)濾索引

    詳解SQL Server的聚焦過(guò)濾索引

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

最新評(píng)論

新巴尔虎右旗| 佛山市| 申扎县| 夏河县| 登封市| 金寨县| 淮滨县| 绥中县| 平凉市| 湖北省| 昌平区| 加查县| 江阴市| 乌什县| 成武县| 阿拉善右旗| 牡丹江市| 鹤壁市| 行唐县| 五莲县| 永嘉县| 乌什县| 澎湖县| 科尔| 西城区| 台安县| 林口县| 大港区| 曲阜市| 淅川县| 大冶市| 高阳县| 安西县| 盐津县| 绥阳县| 邛崃市| 简阳市| 桦川县| 聂荣县| 通化县| 宜昌市|