[英]Introduce filters based on certain conditions in SQL Server WHERE clause
I am forming a dynamic SQL using the following T-SQL 我正在使用以下T-SQL形成动态SQL
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
It works fine but I want to convert this as static SQL using case when. 它工作正常,但我想在使用时将其转换为静态SQL。
Kindly give some suggestion to convert this statement. 请提出一些建议以转换此语句。
this is the query 这是查询
select col1,col2,col3
from table
where col1=@var1 AND
(@var2<=0 OR col2=CONVERT(NVARCHAR(10), @var2)) AND
(@var3<=0 OR col3=CONVERT(NVARCHAR(10), @var3))
Mattia's answer is correct, If you want to use CASE WHEN, then here is an alternative (although I prefer Mattia's) Mattia的答案是正确的,如果您想使用CASE WHEN,那么这里是一个替代方案(尽管我更喜欢Mattia的)
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.