我已经解决了这个问题了一段时间,但我认为必须有一个更简单的方法,所以我决定发帖。
我有一个数据过滤器参数,我想在where子句中创建一个if / else分支或case分支。如果我的@State变量不是“All”,我想在我的where子句中添加“And(state = @State)”。
SELECT timestamp, service, state
FROM socketLog
WHERE (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy')
AND DATEADD(dd, 1, getdate())) AND (state = @State)
ORDER BY service
我试图让if / else和case语句在哪里工作但我有语法问题。我很确定where子句支持case和if语句,但我无法正常工作。
感谢有时间提供帮助的人。
答案 0 :(得分:3)
你不能把最后一位改为:
AND (@State = 'All' OR @State = state)
除非我误解了?!
答案 1 :(得分:1)
如果@ State ='All',则忽略下面的WHERE子句,或者如果设置为其他任何内容,则将其用作过滤器。
WHERE ('All' = @State or state = @State)
答案 2 :(得分:1)
胜利者是我。
Declare @State varchar(20)
set @State = 'All'
SELECT timestamp, service, state
FROM socketLog
WHERE (timestamp BETWEEN dbo.fxMilitaryTime('02/01/12', 'mdy') AND DATEADD(dd, 1, getdate()))
and (State = @State OR (@State = 'All'))
ORDER BY service
go