2012-06-18 41 views
2

我在返回包含空值的列上的可選sql參數空白時所期望的所有結果時遇到了一些困難。具有可選參數和可能的空列的SQL查詢

想象一下,你有一個表如下(referredby是可選的,因此可以爲NULL):

Customertable 
ID CustomerName ReferredBy 
1  Aaron   Joe 
2  Peter   NULL 
3  Steven  Joe 

假設我想對於像這樣的referredby場可選SQL參數查詢:

declare @referredby as varchar(15) 

select id, customername 
from customertable<br> 
where referredby = isnull(@referredby, referredby) 

如果我離開這個參數爲空,這隻會返回:
1亞倫
3史蒂芬

如何使用可選參數返回所有3個結果?

回答

4

試試這個:

select id, customername 
from customertable 
where (referredby = @referredby OR @referredby is null) 

對於原因explained in this post,在SQL Server比較null = null返回false(或未知)。正如null != null

如果你真的很喜歡你的語法,我相信你可以把它通過ANSI_NULLS設置爲關閉工作:set ansi_nulls off

+0

啊,從我讀過,我認爲你使用的語法和isnull()...語法是可以互換的 – AKM

+0

不,重要的是要知道'IS NULL'和'ISNULL()'在SQL Server中做了非常不同的事情。如果您不熟悉兩者之間的區別,可能會引起混淆。 –

1

您的查詢添加這一行:

SELECT ... FROM ... --other codes here 
where (referredby = @referredby) OR (@referredby IS NULL)