麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 01:03:41
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了SQL Server中NULL的正確使用與空間占用的相關資料,需要的朋友可以參考下
 

我們常在SQL Server的使用或維護中遇上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。

為了清晰的理解上述的內容,我們創建一個測試表Test_NULL,然后對表插入2條含有NULL值的記錄,并進行相關驗證操作:

--創建一張允許NULL值的表CREATE TABLE Test_NULL (  num INT NOT NULL PRIMARY KEY  ,fname NVARCHAR(50) NULL  ,lname NVARCHAR(50) NULL)--對表插入4條數據:最后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字段進行=操作:

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

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

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

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

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

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

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

換言之,SQL Server默認是開啟ANSI_NULLS選項的。

--設置ANSI_NULLS為OFF,并使用=NULL查詢記錄SET ANSI_NULLS OFFSELECT  *FROM Test_NULL tnWHERE tn.lname = NULL------------------------------------------3  Aaron  NULL4  Betty  NULL

插入或更新NULL值:

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

NULL的空間占用

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

實際上,上述的認識不夠嚴謹。真實情況是,NULL在可變長與固定長度的類型中均會占用空間

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

以上就是本文的全部內容,希望對大家的學習有所幫助。



注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产黄色网| 成人午夜免费网站 | 男男羞羞视频网站国产 | av手机在线免费播放 | 国产精品国产三级国产在线观看 | av黄色在线免费观看 | 欧美成人午夜一区二区三区 | 96视频在线免费观看 | 黄色一级片在线观看 | 国产精品久久久久久久午夜片 | av电影在线免费观看 | 国产 日韩 亚洲 欧美 | 黄色毛片a级 | 国产一级毛片国语版 | 欧美激情 在线播放 | 中文字幕在线资源 | 天堂成人国产精品一区 | av电影在线网站 | 亚洲成年人免费网站 | 久久久线视频 | 香蕉黄色网| av日韩在线免费观看 | 国产一区二区视频在线播放 | 久久精品视频69 | 一级黄片毛片免费看 | 18被视频免费观看视频 | 操碰视频在线观看 | 久久国产精品久久精品国产演员表 | 特片网久久 | 国产男女爽爽爽爽爽免费视频 | 亚洲四播房 | 99国产精品国产免费观看 | 美女黄色毛片免费看 | 中文区永久区 | 成人电影毛片 | 久久久久久久久久久国产精品 | 在线成人一区二区 | 亚洲最大的成人网 | 97久色| 性少妇videosexfreexxx片 | 精品亚洲在线 |