2015-09-18 40 views
0

我使用下面的T-SQL介紹了一種基於在SQL Server中的某些條件的WHERE子句

Declare @sql nvarchar(max); 
Declare @var1 int = 10, @var2 int = 10, @var3 int = 10 

set @sql = 'select col1, col2, col3 
      from table 
      where col1 = ' + @var1 

IF (@var2 > 0) 
BEGIN 
    SET @sql += ' AND col2 = ' + CONVERT(NVARCHAR(10), @var2) 
END 

IF (@var3 > 0) 
BEGIN 
    SET @sql += ' AND col3 = ' + CONVERT(NVARCHAR(10), @var3) 
END 

它正常工作,形成一個動態的SQL過濾器,但我想用情況下,當轉換這是靜態SQL。

請給出一些建議,以轉換此聲明。

回答

1

這是查詢

select col1,col2,col3 
from table 
where [email protected] AND 
(@var2<=0 OR col2=CONVERT(NVARCHAR(10), @var2)) AND 
(@var3<=0 OR col3=CONVERT(NVARCHAR(10), @var3)) 
+0

謝謝你這麼多馬蒂亞 – StackUser

+0

不客氣... –

1

馬蒂亞的答案是正確的,如果你想什麼時候使用CASE,那麼這裏是一個另類(雖然我更喜歡馬蒂亞的)

SELECT 
    Col1, Col2, Col3 
FROM 
    Table1 
WHERE 
    Col1 = @Var1 
AND Col2 = CASE 
       WHEN @Var2 > 0 THEN CONVERT(NVARCHAR(10), @var2) 
       ELSE Col2 
      END 
AND Col3 = CASE 
       WHEN @Var3 > 0 THEN CONVERT(NVARCHAR(10), @var3) 
       ELSE Col3 
      END 
+0

感謝您的建議,我認爲兩者都適合我。 (我無法選擇兩個答案) – StackUser

+0

沒問題。 Mattia's是恕我直言的最佳答案。 –