SQL Server中NULL的准確應用與空間占用。本站提示廣大學習愛好者:(SQL Server中NULL的准確應用與空間占用)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server中NULL的准確應用與空間占用正文
我們常在SQL Server的應用或保護中趕上NULL,那末甚麼是NULL?以下是MSDN給出的一段冗長描寫(見“Null Values”):
淺顯的講,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.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默許情形下我們不克不及應用=或<>去斷定或查詢一條NULL的記載(見上述),准確的方法是:應用IS NULL或IS NOT NULL去查詢或過濾一條含有NULL的記載。
別的有函數ISNULL(),可斷定並轉換NULL為其他值。
--經由過程IS NULL查詢含有NULL的記載 SELECT * FROM Test_NULL tn WHERE tn.lname IS NULL ------------------------------------------ 3 Aaron NULL 4 Betty NULL --NULL不等於任何值,乃至NULL不等於NULL --默許不克不及應用<>或=婚配NULL SELECT * FROM Test_NULL tn WHERE tn.lname <> NULL OR tn.lname = NULL ------------------------------------------
但需留意:SQL Server僅是在默許情形下不克不及應用=或<>,當設置ANSI_NULLS為OFF後,便可應用=或<>查詢NULL值
換言之,SQL Server默許是開啟ANSI_NULLS選項的。
--設置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的空間占用
平日的熟悉是:NULL在可變長類型(如nvarchar(50),varchar(8))中是不占用空間的,在固定長度的類型(如int)中會占用存儲空間。
現實上,上述的熟悉不敷嚴謹。真實情形是,NULL在可變長與固定長度的類型中均會占用空間
在SQL Server非Sparse Columns中,存儲NULL的值需1個bit的NULL bitmap mask。
以上就是本文的全體內容,願望對年夜家的進修有所贊助。