2013-05-28 66 views
2

我想創建一個sql server查詢選擇。我有一個參數可以爲null或不是。 當@value爲空時我想用空值返回所有mycolumns。如果值不爲空,我想用該值返回mycolumns。sql服務器在where子句中返回有或沒有空值的行

如何最好地處理這個問題,我想:

SELECT name FROM mytable 
WHERE coalesce(@value,mycolumn)=mycolumn 

我有一種感覺它位於空值的處理。我該如何解決?

回答

2
where myColumn = @value or 
     (myColumn is null and @value is null) 
-1

嘗試:

SELECT name FROM mytable where myColumn = @value or @value is null 
2
SELECT T.name 
FROM dbo.mytable T 
WHERE 
    EXISTS (
     SELECT @value INTERSECT SELECT T.mycolumn 
    ) 
; 
+0

這真是太棒了!忍不住就這麼說。 –

+0

謝謝,@AndriyM!確保你檢查執行計劃。在許多情況下,這可以完美工作,但是當您開始在複雜查詢或多列中執行此操作時請謹慎。它可以工作,但你必須驗證,因爲我已經看到了它得到一個糟糕的執行計劃的情況。 – ErikE

+0

我會小心的,謝謝! –

0

第一種情況。當u傳遞一個城市的名字..

DECLARE @SearchType varchar(80); SET @SearchType = 'Alamo'; Select * From Homes where City = @SearchType OR Coalesce(@SearchType,'') = ''

第二種情況。城市空或空。

SET @SearchType = ''; 

在第一種情況下,您將得到城市名稱的結果。在第二種情況下,你會得到所有的結果。

相關問題