sql - 存储过程中一列上的两个可选参数

标签 sql sql-server t-sql

我有表 eRx(商店电子处方),其中有一个pharmacy 列。我正在为 pharmacy 传递两个可选参数。

我这样声明参数:

DECLARE @pharmacy varchar(50) = null, 
        @Pharmacy1 varchar(50) = null

并在 where 子句中使用它们

WHERE (eRx.Pharmacy LIKE '%' + @Pharmacy + '%' 
       OR @Pharmacy IS NULL
       OR eRx.Pharmacy LIKE '%' + @Pharmacy1 + '%' 
       OR @Pharmacy1 IS NULL)

如果我只传递一个参数,我将获取所有记录。它没有按预期工作。

例如,如果我传递 @pharmacy = 'CVS',我将获得所有行。如果我传递两个参数,那么结果将按预期返回。

请帮助我

最佳答案

您想要查找符合这两个条件的记录:

  • 匹配@Pharmacy时AND
  • 匹配@Pharmacy1 时给出

您可以使用OR。您是说:当 @Pharmacy 匹配或 @Pharmacy 为 null 或...时选择行,因此当 @Pharmacy 为 null 时,整个条件匹配。

你想要

WHERE (eRx.Pharmacy LIKE '%' + @Pharmacy + '%' OR @Pharmacy IS NULL)
  AND (eRx.Pharmacy LIKE '%' + @Pharmacy1 + '%' OR @Pharmacy1 IS NULL)

关于sql - 存储过程中一列上的两个可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68751782/

相关文章:

SQL Server - UPDATE 语句中的 JOIN

SQL Server 基于行的分组

SQL Server 2008 - 电子邮件通知

sql - DATEPART 修复日期

mysql - 获取每个名称的总成本之和

sql - 在日期之间获取数据不准确

sql - 在批量数据上执行时,使用ALTER提高列的精度是否会影响数据库性能?

mysql - 匹配关系最多的条目

sql - Spark.sql() 的 REGEXP_REPLACE

sql - 如何找到不为空的结果?