如何在 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
表达式(即 THEN
和 ELSE
之后的逻辑)的 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
我正在尝试使用 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
表达式(即 THEN
和 ELSE
之后的逻辑)的 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