成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在SQL Server中處理空值時涉及的三個問題

數據庫 SQL Server
SQL Server是關系型數據庫管理系統,SQL Server數據庫在數據庫市場上雖然不能說是最好的,SQL Server數據庫還是占據著一定地位的,功能性是很完善的,在SQL Server數據庫中處理空值時涉及到那些問題呢?

這篇文章主要介紹了在SQL Server中處理空值時所涉及的3個問題:計數、使用空表值以及外鍵處理,下文將會給出詳細的分析,希望對大家能夠有所幫助。

用COUNT(*)處理空值

大多數集合函數都能在計算時消除空值;COUNT函數則屬于例外。對包含空值的一個列使用COUNT函數,空值會從計算中消除。但假如COUNT函數使用一個星號,它就計算所有行,而不管是否存在空值。

如果希望COUNT函數對給定列的所有行(包括空值)進行計數,請使用ISNULL函數。ISNULL函數會將空值替換成有效的值。

事實上,對集合函數來說,如果空值可能導致錯誤結果,ISNULL函數就非常有用。記住在使用一個星號時,COUNT函數會對所有行進行計算。下例演示了空值在AVG和COUNT集合函數中的影響:

 

以下為引用的內容:

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

#p#

恰當使用空表值

SQL Server可能出現一種特殊情況:在引用父表的一個表中,因為不允許空值,所以“聲明引用完整性”(DRI)可能不會得到強制。即使父表不包含空值,在子表引用了父表主鍵約束或惟一約束的列中,也可能包含空值。

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

如下例所示,我們創建父表,并在其中插入兩個值。

以下為引用的內容:

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
 

 

以下代碼則創建子表,并在引用父表的列中插入一個空值。

以下為引用的內容:

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
 

但在以下代碼中,要同時從父表和子表選擇值。雖然父表不包含空值,但在子表引用了父表的那個列中,將允許一個空值。

然后丟棄所有表,清除這個演示所用的數據庫對象。

SELECT * FROM ChildGOSELECT * FROM ParentGODROP TABLE Child, ParentGO

在可以為空的外鍵中檢查數據的有效性

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

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

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

 

 

【編輯推薦】

  1. SQL Server數據庫占用過多內存的解決方法
  2. SQL Server數據庫服務器高性能設置
  3. 優化sql server數據庫的經驗總結
責任編輯:迎迎 來源: 賽迪網
相關推薦

2010-07-02 13:26:56

SQL Server處

2023-03-16 15:13:41

缺失值據集中數據分析

2009-03-06 09:42:16

性能索引

2010-04-02 10:16:17

Oracle備份

2024-01-09 15:37:46

2023-09-08 20:52:02

數字孿生測試驅動開發

2024-03-19 14:14:27

線程開發

2020-07-03 07:56:34

Golang編程語言

2011-04-01 16:48:28

SQL Server

2011-12-20 10:41:36

程序員

2009-08-13 17:22:15

C#數據集

2010-07-06 10:25:16

SQL Server空

2009-08-06 16:24:32

C#向Sql Serv

2023-10-17 07:23:00

Vue組件代碼

2011-03-07 10:10:35

MySQL處理空值

2011-08-04 18:32:47

數據庫字典SQL Server數

2012-10-30 17:40:00

產品Minefold開發

2011-11-04 09:22:37

SQL Server

2011-01-19 13:11:25

Zimbra白名單證書

2010-04-09 15:29:10

無線信號故障
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美国产一区二区 | 国产精品久久久久久久7电影 | 亚洲精品一区二区三区在线 | 免费成人高清 | 久久精品亚洲 | 日韩中文在线视频 | 国产精品高潮呻吟久久 | 夜夜草av| 中文字幕日韩欧美一区二区三区 | 黄色片网站国产 | 欧美日韩在线综合 | 在线欧美a| 欧美激情99| av在线一区二区三区 | 美国a级毛片免费视频 | 日韩精品一二三 | 欧美性受 | 欧美日韩综合精品 | 久久国产精品免费视频 | 亚洲另类春色偷拍在线观看 | 成人精品一区二区 | 日日干综合| 91久久伊人 | 国产成人短视频在线观看 | 成人亚洲性情网站www在线观看 | 日韩欧美在线视频观看 | 国产视频一区在线 | 欧美日韩不卡合集视频 | 国产精品久久久久久妇女 | 国产成人精品亚洲日本在线观看 | 午夜精品久久久久久久久久久久久 | 亚洲日本乱码在线观看 | 国产a视频 | 在线观看免费av网 | 久久综合狠狠综合久久综合88 | 超级碰在线| 男女啪啪网址 | 一区二区三区四区在线视频 | 久久精品一区 | 人人亚洲 | 91精品国产日韩91久久久久久 |