我发现了一堆类似的questions,我有,但无法得到确切的答案!如何在SQL where条款中应用if条件的用户过滤器?
我有以下SQL中的条件where子句
declare @status int, @applyUserFilter bit, @user nvarchar(156)
--following are values being set by UI
set @activeStatus = 1
set @applyUserFilter = 1
set @user = 'xyzUser'
--I want to filter the list by users only when @applyUserFilter flag is true otherwise it should return the list for all users
--This is what i tried but gives syntax error
WHERE ActiveStatus = @activeStatus
AND CASE WHEN @applyUserFilter = 1 THEN User = @user
注:这只能说明where子句代码!
使用'CASE'在'WHERE'声明要求你设置一个'column'等于'CASE'的结果。所以当场景'@applyUserFilter = 1'为真时,需要将一列设置为等于1来进行过滤。 – Simon
我想你想要实现的是:'User = CASE WHEN @applyUserFilter = 1 then @user else null end' else'else'语句是可选的。 – Simon
谢谢! @Simon在这种情况下,当'@applyUserFilter = 0'时它不会返回任何东西,在这种情况下,我希望它返回所有用户的完整列表 – updev