介绍了一种基于在SQL Server中的某些条件的WHERE子句

问题描述:

我使用下面的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。

请给出一些建议,以转换此声明。

这是查询

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

不客气... –

马蒂亚的答案是正确的,如果你想什么时候使用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是恕我直言的最佳答案。 –