我在SQL Server 2008中有一个存储过程,用于从表中获取数据。
我的输入参数是:
@category nvarchar(50) = '',
@departmentID int
我的Where子句是:
WHERE A.departmentID = @departmentID
AND A.category = @category
我有什么方法可以将Case语句(或类似的东西)应用于这个Where子句,说它应该只检查类别匹配,如果@category不是''和否则选择所有类别
我唯一能想到的就是使用以下内容。从技术上讲这是有效的,但我无法检查这里所需的确切类别匹配:
WHERE A.departmentID = @departmentID
AND A.category LIKE '%'+@category+'%'
答案 0 :(得分:2)
WHERE A.departmentID = @departmentID
AND ((@category = '') or (@category <> '' AND A.category = @category))
这应该为您提供您想要的结果集,它基本上检查空白类别,然后返回部门ID的所有结果或仅返回参数中指定的类别。
答案 1 :(得分:2)
您可以修改WHERE
条款,如下所示:
WHERE A.departmentID = @departmentID
AND (@category = '' or A.category = @category)
答案 2 :(得分:0)
试试这个
if(LTRIM(RTRIM(@category))='') --if string is empty then set it to NULL
set @category=NULL
select * from tbl_name A
WHERE A.departmentID = @departmentID
AND A.category = @category
(AND A.category LIKE '%'+@category+'%' OR @category IS NULL)
如果我们指定NULL,右侧OR
条件将返回true
因此,如果我们指定@category NULL OR ''
(空)
答案 3 :(得分:0)
如果从前端传递
,请考虑空值WHERE A.departmentID = @departmentID
AND ( ( isnull(@category,'') = '' or A.category = @category )