SQL Server:如何在Where子句中处理两种不同的情况

时间:2014-10-06 08:36:27

标签: sql sql-server case where where-clause

我在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+'%'

4 个答案:

答案 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 )