SQL中關於NULL的程式碼
set nocount on
--########### 工具預設情況下對欄位NULL的處理 ###########--
--預設工具為on
select ansi_null_dflt_on
from sys.dm_exec_sessions
where session_id=@@spid
/*
ansi_null_dflt_on
-----------------
1
*/
--或者執行下面查詢,結果也為
select GETANSINULL()
--建立測試表,不指定name列是否可為空
create table tb_A (id int not null, name varchar(20))
--執行如下插入操作,一切正常
insert into tb_A (id) values (1)
select * from tb_A
/*
id name
----------- --------------------
1 NULL
*/
--清理測試表
drop table tb_A
--########### 引擎預設情況下對欄位NULL的處理 ###########--
--預設引擎為off
set ansi_null_dflt_off on
--檢視當前回話的ansi_null_dflt_on設定
select ansi_null_dflt_on
from sys.dm_exec_sessions
where session_id=@@spid
/*
ansi_null_dflt_on
-----------------
0
*/
--建立測試表,不指定name列是否可為空
create table tb_B (id int not null, name varchar(20))
--執行如下插入操作,會報錯
insert into tb_B (id) values (1)
/*
訊息515,級別16,狀態2,第1 行
不能將值NULL 插入列'name',表'IMTiange.dbo.tb_B';列不允許有空值。INSERT 失敗。
語句已終止。
*/
--檢視系統檢視COLUMNS的is_nullable列結果為No
select is_nullable
from INFORMATION_SCHEMA.COLUMNS
where table_name='tb_B' and column_name='name'
/*
is_nullable
-----------
NO
*/
--或者檢視列的屬性AllowsNull,為表示不允許為空
select COLUMNPROPERTY(object_id('tb_B'), 'name', 'AllowsNull')
--清理測試表
drop table tb_B
--########### 字串連線中的NULL處理 ###########--
--設定concat_null_yields_null為on
set concat_null_yields_null on
select concat_null_yields_null
from sys.dm_exec_sessions
where session_id=@@spid
/*
concat_null_yields_null
-----------------------
1
*/
--查詢結果為NULL
select 'this is ['+NULL+'] result' as result
/*
result
---------
NULL
*/
--設定concat_null_yields_null為off,結果不為null
set concat_null_yields_null off
select 'this is ['+NULL+'] result' as result
/*
result
------------------
this is [] result
*/
--########### NULL值的比較 ###########--
--設定並檢視設定結果
set ansi_nulls on
select ansi_nulls
from sys.dm_exec_sessions
where session_id=@@spid
--測試情況:is null為真,=null為假
declare @i int
set @i=null
select (case when @i IS null then 'True' else 'False' end) as [is null],
(case when @i = NULL then 'True' else 'False' end) as [=null]
/*
is null =null
------- -----
True False
*/
--設定為off後,測試情況:is null為真,=null為真
set ansi_nulls off
declare @i int
set @i=null
select (case when @i IS null then 'True' else 'False' end) as [is null],
(case when @i = NULL then 'True' else 'False' end) as [=null]
/*
is null =null
------- -----
True True
*/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616533/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL 語句中關於 NULL 的那些坑SQLNull
- oracle中關於null的定義OracleNull
- 關於pl/sql的程式碼保護SQL
- 關於NULLNull
- 關於ResultFilter類中NULL_INT的作用????FilterNull
- 警惕SQL中間的NULLSQLNull
- SQL中的空值NULLSQLNull
- SQL server中的NULL值SQLServerNull
- 關於 oracle NULLOracleNull
- Java 中關於 null 物件的容錯處理JavaNull物件
- 關於爛程式碼的那些事(中)
- SQL 查詢中的 NULL 值SQLNull
- 深入詳解SQL中的NullSQLNull
- sql中的安全問題nullSQLNull
- ORACLE關於NULL的總結OracleNull
- SQL中的Null深入研究分析SQLNull
- 關於NULL的兩個計算Null
- 關於null值的小知識Null
- 關於shell中的pl/sql指令碼錯誤排查與分析SQL指令碼
- 關於Mybatis中SQL語句的整理MyBatisSQL
- git stash關於程式碼中bug的查詢使用Git
- 關於JDONJIVE中DbFilterManager中程式碼的疑問Filter
- SQL NULLSQLNull
- 你真的理解T-sql中的NULL嗎?SQLNull
- 關於oracle中的sql資料型別OracleSQL資料型別
- 關於pl/sql中的繫結變數SQL變數
- 關於在SAP中SQL語句的效能SQL
- Java--- 關於null的處理若干方法JavaNull
- 關於string.Empty & "" & null 的討論Null
- Shell指令碼中的 /Dev/Null 用途指令碼devNull
- 關於jsp中的亂碼!!!!JS
- 使用Java8中的Optional類來消除程式碼中的null檢查JavaNull
- SQL Server 表的管理_關於事務操作的詳解(案例程式碼)SQLServer
- 關於Oracle DB中SQL Script的註釋(REM,--,/* */)OracleSQLREM
- 關於sql_profile中的繫結變數SQL變數
- 關於NULL值在索引裡的兩個疑惑Null索引
- 關於程式碼複用
- MySQL中is not null和!=null和<>null的區別MySqlNull