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