简体   繁体   English

根据SQL Server WHERE子句中的某些条件引入筛选器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM