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中間的NULLSQLNull
- SQL 查詢中的 NULL 值SQLNull
- Java 中關於 null 物件的容錯處理JavaNull物件
- 關於Mybatis中SQL語句的整理MyBatisSQL
- SQL Server 表的管理_關於事務操作的詳解(案例程式碼)SQLServer
- git stash關於程式碼中bug的查詢使用Git
- Java--- 關於null的處理若干方法JavaNull
- Shell指令碼中的 /Dev/Null 用途指令碼devNull
- 使用Java8中的Optional類來消除程式碼中的null檢查JavaNull
- Oracle PL/SQL程式碼中的註釋OracleSQL
- 關於程式碼複用
- 關於SQL開發規範中的那些誤區!SQL
- 關於 Go 程式碼結構的思考Go
- 關於程式碼質量退化的思考
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- 關於ERP,中臺和低程式碼,我的幾點意見
- 關於 Bash 指令碼中 Shebang 的趣事指令碼
- SQL Server 表的管理_關於資料增刪查改的操作的詳解(案例程式碼)SQLServer
- SQL Server中Table字典資料的查詢SQL示例程式碼SQLServer
- 關於對健壯性程式碼的理解
- 【SQL】17 SQL 檢視(Views)、SQL Date 函式、SQL NULL 值、SQLView函式Null
- 如何在Java程式碼中去掉煩人的“!=null”JavaNull
- 關於SQL優化的闢謠SQL優化
- merge sql error, dbType sqlserver, druid1.1.10, sql : nullSQLErrorServerUINull
- 關於kindeditor插入程式碼問題
- 關於 Angular 程式設計中的 shim 概念Angular程式設計
- 關於程式碼版本管理的思考和建議
- 關於公司程式碼許可權的問題
- [20180808]Null value to Dynamic SQL.txtNullSQL
- 1.3.2. 關於SQL*PlusSQL
- 關於SQL優化的小知識SQL優化
- 關於vim看linux 核心原始碼時的程式碼補全Linux原始碼
- 關於Static程式碼塊、匿名程式碼塊、構造器的小擴充C程式
- 關於 /dev/null 差點直播吃鞋的一個小問題devNull
- 關於 Spring 中 getBean 的全流程原始碼解析SpringBean原始碼
- 關於 rxjs 程式設計中的 take(1) 操作JS程式設計
- Java中各程式碼層級的關係Java
- 關於接入微博登入的程式碼實現
- 關於程式碼如何執行的五個問題