Sql 如何创建在WHERE子句中具有CASE函数的存储过程?

Sql 如何创建在WHERE子句中具有CASE函数的存储过程?,sql,sql-server,Sql,Sql Server,我试图创建一个在WHERE子句中具有CASE函数的存储过程 我有三个表:银行,员工,和级别 我有一个参数@BankName,当@BankName像'AB%'时,结果是为该银行工作的员工 当@BankName与'AB%'不同时,结果显示为其他银行而不是银行AB工作的所有员工 当@BankName为空时,它将显示所有结果 我试过这个 CREATE PROCEDURE [dbo].[usp_EmpList] @BankNAME VARCHAR(50) = NULL AS BEGIN

我试图创建一个在
WHERE
子句中具有
CASE
函数的存储过程

我有三个表:
银行
员工
,和
级别

我有一个参数
@BankName
,当
@BankName像'AB%'
时,结果是为该银行工作的员工

@BankName与'AB%'不同时,
结果显示为其他银行而不是银行AB工作的所有员工

@BankName为空时
,它将显示所有结果

我试过这个

CREATE PROCEDURE [dbo].[usp_EmpList]
    @BankNAME   VARCHAR(50) = NULL
AS
BEGIN
    SELECT 
        b.BankName,
        e.EmployeeName,
        l.LevelName
    FROM 
        Bank b 
    INNER JOIN 
        Employee e ON b.EmpID = e.EmpID
    INNER JOIN 
        Level l ON l.LvlID = e.LvlID
    WHERE
        b.BankName = CASE
                WHEN @BankName = 'AB' THEN 'AB'
                WHEN @BankName NOT LIKE 'AB%' THEN '' --This is where I'm confused.
                ELSE NULL
                 END
END

那么,我怎样才能得到我想要的结果呢?或者可能有更好的语法?

不要使用
大小写
表达式,而是结合使用
-
条件:

WHERE
    (@BankName IS NOT NULL AND @BankName LIKE 'AB%' AND b.BankName LIKE 'AB%')
    OR (@BankName IS NOT NULL AND @BankName NOT LIKE 'AB%' AND b.BankName NOT LIKE 'AB%')
    OR (@BankName IS NULL)
注:


这种类型的查询称为查询。有许多方法可以实现这一点。其中之一就是上面提到的。阅读文章了解更多信息。

不要使用
大小写
表达式,而是使用
-
条件的组合:

WHERE
    (@BankName IS NOT NULL AND @BankName LIKE 'AB%' AND b.BankName LIKE 'AB%')
    OR (@BankName IS NOT NULL AND @BankName NOT LIKE 'AB%' AND b.BankName NOT LIKE 'AB%')
    OR (@BankName IS NULL)
注:


这种类型的查询称为查询。有许多方法可以实现这一点。其中之一就是上面提到的。阅读本文了解更多信息。

您可以用简单AND和OR子句替换大小写。下面是它的样子

CREATE PROCEDURE [dbo].[usp_EmpList]
 @BankNAME  VARCHAR(50) = NULL
AS
BEGIN
    SELECT 
        b.BankName,
        e.EmployeeName,
        l.LevelName
    FROM 
        Bank b INNER JOIN Employee e ON b.EmpID = e.EmpID
        INNER JOIN Level l ON l.LvlID = e.LvlID
    WHERE
        (@BankName = 'AB' AND b.BankName = 'AB') OR 
        (@BankName NOT LIKE 'AB%' AND b.BankName = '') OR
        (
          NOT (@BankName = 'AB' AND @BankName NOT LIKE 'AB%') AND
          b.bankName IS NULL
        ) 

你可以用简单的AND和OR子句来代替CASE。下面是它的样子

CREATE PROCEDURE [dbo].[usp_EmpList]
 @BankNAME  VARCHAR(50) = NULL
AS
BEGIN
    SELECT 
        b.BankName,
        e.EmployeeName,
        l.LevelName
    FROM 
        Bank b INNER JOIN Employee e ON b.EmpID = e.EmpID
        INNER JOIN Level l ON l.LvlID = e.LvlID
    WHERE
        (@BankName = 'AB' AND b.BankName = 'AB') OR 
        (@BankName NOT LIKE 'AB%' AND b.BankName = '') OR
        (
          NOT (@BankName = 'AB' AND @BankName NOT LIKE 'AB%') AND
          b.bankName IS NULL
        ) 

谢谢,那太快了汉克,那太快了D