TSQL--SET ANSI_NULLS OFF


當ANSI_NULLS 為ON時,遵循SQL92的標准,只能使用IS NULL 來判斷值是否為NULL, 而不能使用=或<>來與NULL做比較,任何值包括NULL值與NULL值做=或<>運算都得到FALSE

 

當ANSI_NULLS為OFF時,將不再遵循SQL92標准,可以使用=和<>來與NULL做BOOL運算

 

測試代碼

SET ANSI_NULLS ON

;WITH T1 AS

(

SELECT 1 AS ID

UNION ALL

SELECT NULL

UNION ALL 

SELECT 2 

)

SELECT * FROM T1

WHERE ID =NULL

 

GO

SET ANSI_NULLS OFF

;WITH T1 AS

(

SELECT 1 AS ID

UNION ALL

SELECT NULL

UNION ALL 

SELECT 2 

)

SELECT * FROM T1

WHERE ID =NULL

 

測試結果:

第二次查詢能獲取NULL的一行

 

 

關於NULL的延伸:

1. 對應聚合函數COUNT,只有SELECT COUNT(*)和SELECT COUNT(1) 會將為NULL的行計算在內,SELECT COUNT(ID)會忽略ID列為NULL的行

2. 對應除COUNT外的其他聚合函數,計算時不考慮為NULL的行

3. 對應CHECK CONSTRAINT,如果列允許為NULL的條件下,為NULL的行將不受CHEKC CONSTRAINT的限制,例如有CHECK CONSTRAINT條件為C1>10,對C1列插入NULL值或更新為NULL不會違反CHECK CONSTRAINT.

4. 在GROUP BY 的時候,會將所有NULL歸為一組


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM