2016-06-13 126 views
2

我寫SQL Server過程像下面如果SQL Server條件NULL檢查

if @name_belongs_to != 'John' 
begin 
    --doing some operation 
end 

如果名字不是「約翰」,這是工作的罰款。但是,如果它是NULL,它不會執行,如果部分。

如何處理?

+3

這是這是三種重要邏輯的症狀,在這裏閱讀以獲取更多信息; https://www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued-logic/ –

回答

4

一種選擇是對名稱中使用COALESECE()

if coalesce(@name_belongs_to, '') != 'John' 
begin 
    --doing some operation 
end 

使用等於運算你不能比較的SQL Server(和大多數其他RDBMS)NULL值。相反,您需要使用IS NULLIS NOT NULL。使用COALESCE()這裏是一個技巧,它將NULL的值轉換爲字符串,以便與!=進行比較。

0

只使用不爲空

if @name_belongs_to != 'John' or @name_belongs_to is not null 
begin 
    --doing some operation 
end 
2

這也是正確的:

if @name_belongs_to != 'John' OR @name_belongs_to IS NULL 
begin 
    --doing some operation 
end 

MSDN article介紹如何三值邏輯的作品。

0

默認情況下,任何比較爲null返回false

空= null是假
空= '值' 是假

,所以你需要添加

OR @name_belongs_to IS NULL 
0

我在下面用聲明來解決我的問題,

if isnull(@name_belongs_to,'') != 'John'