2012-07-21 51 views
3

我知道比較操作不null值SQL現在,在這裏你可以看到這樣的工作對於我們使用isnull,現在我有這樣的表的情況下,靈活選擇查詢

ID  Name  Order 
3 KnowledgeBase1 NULL 
4 KnowledgeBase2 NULL 
5 KnowledgeBase3 NULL 
6 KnowledgeBase4 NULL 
7 Child of first 1 

Order可以null或任何數值,

現在,這裏的選擇查詢

declare @order int = null 

select 
     ID, 
     Name, 
     Order 
from tbl 
where Order = @order 

這個查詢好w ^母雞@order有任何numerals但是當它具有null它當然不是工作,因爲where子句應該Order is null對於這種情況下,

所以問題是,有沒有辦法做到這一點,而不使用exec() with a string of query或在條件語句我的查詢?

+0

使用變量名爲@order和名爲訂單字段使得代碼不清楚,並且如果您忘記了「@」,可能會導致錯誤/問題。 ORDER是一個保留的SQL字。 – Jocelyn 2012-07-21 11:31:42

+0

我只是修剪了代碼在這裏發佈,它不是那樣的。 – yogi 2012-07-21 11:33:28

回答

2

比較@orderNULL在where子句中,如果是,則使用order IS NULLOR與該作品,如果它有一個值現有條件一起:

select 
     ID, 
     Name, 
     Order 
from tbl 
where 
    Order = @order 
    OR (@order IS NULL AND order IS NULL) 

您還沒有指定您的RDBMS,但快速測試顯示這方面的工作與MySQL的

+0

我正在使用SQL-2012,但它工作thanx – yogi 2012-07-21 11:30:26

0

如果使用ISNULL與列名是工作

DECLARE @order INT = ''

選擇ID,名稱,定單 從TBL其中ISNULL(訂單, '')= @order

+0

不錯的嘗試,但它需要很多數據類型的對話。 – yogi 2012-07-21 11:40:38