五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

SQL Server中NULL的正確使用與空間占用

發(fā)布日期:2021-12-21 00:58 | 文章來源:CSDN

我們常在SQL Server的使用或維護(hù)中遇上NULL,那么什么是NULL?如下是MSDN給出的一段簡短描述(見“Null Values”):

  • A value of NULL indicates that the value is unknown. A value of NULL is different from an empty or zero value. No two null values are equal. Comparisons between two null values, or between a NULL and any other value, return unknown because the value of each NULL is unknown.

通俗的講,NULL就是一個值,而且這個值是未知的(unknown);NULL不能等價任何值,甚至都不等價它自己,即NULL不等于NULL。

為了清晰的理解上述的內(nèi)容,我們創(chuàng)建一個測試表Test_NULL,然后對表插入2條含有NULL值的記錄,并進(jìn)行相關(guān)驗證操作:

--創(chuàng)建一張允許NULL值的表
CREATE TABLE Test_NULL (
  num INT NOT NULL PRIMARY KEY
  ,fname NVARCHAR(50) NULL
  ,lname NVARCHAR(50) NULL
)
--對表插入4條數(shù)據(jù):最后2條記錄含有NULL值
INSERT INTO Test_NULL (num,fname,lname) VALUES(1, 'Tom','Jane')
INSERT INTO Test_NULL (num,fname,lname) VALUES(2, 'Dave','')
INSERT INTO Test_NULL (num,fname) VALUES(3, 'Aaron')
INSERT INTO Test_NULL (num,fname) VALUES(4, 'Betty')

為了驗證NULL值是未知的,我們通過如下SQL查詢表Test_NULL的記錄,對lname字段進(jìn)行=操作:

--若兩個NULL是可以相等的,那么將輸出4條記錄。實際只輸出2條記錄

SELECT
  *
FROM Test_NULL tn 
LEFT JOIN Test_NULL g
  ON tn.num = g.num
WHERE tn.lname = g.lname
------------------------------------------
1  Tom Jane  1  Tom Jane
2  Dave    2  Dave  
--查詢lname為''的記錄,即驗證NULL不等于''
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = ''
------------------------------------------
2  Dave  

正確查詢/使用SQL Server中的NULL

由于NULL是未知的,因此在SQL Server默認(rèn)情況下我們不能使用=或<>去判斷或查詢一條NULL的記錄(見上述),正確的方式是:使用IS NULL或IS NOT NULL去查詢或過濾一條含有NULL的記錄。

另外有函數(shù)ISNULL(),可判斷并轉(zhuǎn)換NULL為其他值。

--通過IS NULL查詢含有NULL的記錄
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname IS NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL
--NULL不等于任何值,甚至NULL不等于NULL
--默認(rèn)不能使用<>或=匹配NULL
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname <> NULL OR tn.lname = NULL
------------------------------------------

但需注意:SQL Server僅是在默認(rèn)情況下不能使用=或<>,當(dāng)設(shè)置ANSI_NULLS為OFF后,即可使用=或<>查詢NULL值

換言之,SQL Server默認(rèn)是開啟ANSI_NULLS選項的。

--設(shè)置ANSI_NULLS為OFF,并使用=NULL查詢記錄
SET ANSI_NULLS OFF
SELECT
  *
FROM Test_NULL tn
WHERE tn.lname = NULL
------------------------------------------
3  Aaron  NULL
4  Betty  NULL

插入或更新NULL值:

--插入1條含有NULL的新記錄
INSERT INTO Test_NULL (num,fname,lname) VALUES(5, 'Serena', NULL)
--更新某條記錄的字段值為NULL
UPDATE Test_NULL SET fname = NULL
WHERE num = 2

NULL的空間占用

通常的認(rèn)識是:NULL在可變長類型(如nvarchar(50),varchar(8))中是不占用空間的,在固定長度的類型(如int)中會占用存儲空間。

實際上,上述的認(rèn)識不夠嚴(yán)謹(jǐn)。真實情況是,NULL在可變長與固定長度的類型中均會占用空間

在SQL Server非Sparse Columns中,存儲NULL的值需1個bit的NULL bitmap mask。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部