我的存储过程接受参数,其中一个@SearchBy
可以包含几个不同的值,如IISAppPool
, ScheduledTask
, WindowsService
, COM+
,ServiceAccount
等,如下CASE statement
所示。
根据值是什么,它将在值的相应列中查找该值。
sComponentType
将始终包含IIS_APP_POOL
、或SCHED_TASK
,无论是什么。WIN_SERVICE
COM_PLUS
@SearchBy
我正在为我的 where 子句而苦苦挣扎,它需要一个CASE
声明。
以下工作正常。
WHERE
sDate BETWEEN @FromDate AND @ToDate
AND
CASE @SearchBy
WHEN 'IISAppPool' THEN sComponentName
WHEN 'ScheduledTask' THEN sComponentName
WHEN 'WindowsService' THEN sComponentName
WHEN 'COM+' THEN sComponentName
WHEN 'ServiceAccount' THEN sServiceAccount
WHEN 'Server' THEN sServerName
WHEN 'IMCCReference' THEN sIMCCReference
WHEN 'User' THEN sManager
END LIKE('%' + @SearchCriteria + '%')
我正在寻找的是这样的:
WHERE
sDate BETWEEN @FromDate AND @ToDate
AND
CASE @SearchBy
WHEN 'IISAppPool' THEN sComponentName AND sComponentType = 'IIS_APP_POOL'
WHEN 'ScheduledTask' THEN sComponentName AND sComponentType = 'SCHED_TASK'
WHEN 'WindowsService' THEN sComponentName AND sComponentType = 'WIN_SERVICE'
WHEN 'COM+' THEN sComponentName AND sComponentType = 'COM_PLUS'
WHEN 'ServiceAccount' THEN sServiceAccount
WHEN 'Server' THEN sServerName
WHEN 'IMCCReference' THEN sIMCCReference
WHEN 'User' THEN sManager
END LIKE('%' + @SearchCriteria + '%')
我知道这是不可能的,所以除了上面的内容之外,我还尝试了以下内容,但如果@SearchBy
不是应用程序池、计划任务、Windows 服务或 COM+ 组件,我只是不知道如何编写代码:
AND
sComponentType =
CASE @SearchBy
WHEN 'IISAppPool' THEN 'IIS_APP_POOL'
WHEN 'ScheduledTask' THEN 'SCHED_TASK'
WHEN 'WindowsService' THEN 'WIN_SERVICE'
WHEN 'COM+' THEN 'COM_PLUS'
END
我希望我说得通。