介绍了一种基于在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))
答
马蒂亚的答案是正确的,如果你想什么时候使用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是恕我直言的最佳答案。 –
谢谢你这么多马蒂亚 – StackUser
不客气... –