如何在 T-SQL 中使用条件

How to use condition in T-SQL

我正在尝试使用 select 案例,以便在 sql 查询中使用或不使用 where 条件。但它不起作用,如果可能的话,我可以使用一些帮助来解决这个问题

DECLARE @CategoryID Int
SET @CategoryID = 0
SELECT * FROM SomeTable 
CASE WHEN @CategoryID = 0 THEN 
ELSE
WHERE        (dbo.SomeTable.ID = @CategoryID)
END

所以如果我将 0 传递给 @CategoryID 参数我根本不应该过滤,否则我想过滤。这能做到吗?

重新表述您的逻辑以删除 CASE 表达式:

SELECT *
FROM SomeTable
WHERE @CategoryID IN (0, ID);

这是可行的,因为当 @CategoryID = 0 时,WHERE 子句始终为真,否则当 ID = @CategoryID.

时它会为真

您当前的尝试是一个常见问题,源于未按预期使用 CASE 表达式。 CASE 表达式(即 THENELSE 之后的逻辑)的 predicate 必须是 literal 值,不是另一个逻辑表达式。在这种情况下,我们甚至不需要 CASE.

您的语法错误...您必须重新排列您的 where 子句:

DECLARE @CategoryID Int = 0;

SELECT * FROM SomeTable 
WHERE @CategoryID = 0 OR @CategoryID = ID

如果变量设置为 0,则 where 子句始终为真,否则,其值取决于条件 @CategoryID = ID

这是可能的,首先是根据您的case条件

构建查询
DECLARE @CategoryID INT
SET @CategoryID = 0
declare @strsql varchar(max)

set @strsql =  
    CASE WHEN coalesce(@CategoryID, 0) = 0 THEN 'SELECT * FROM SomeTable'
    ELSE
        'SELECT * FROM SomeTable WHERE 1 = '+ cast(@CategoryID as varchar(10)) + ''
    END
print  @strsql
exec sp_executesql @strsql