当前位置: 首页 > 面试题库 >

SQL:条件AND在何处

公西光华
2023-03-14
问题内容

我正在尝试创建一个存储过程,该过程允许省略参数,但是如果提供了参数,则将其与:

CREATE PROCEDURE 
    MyProcedure

    @LastName Varchar(30) = NULL,
    @FirstName Varchar(30) = NULL,
    @SSN INT = NULL
AS

SELECT LastName, FirstName, RIGHT(SSN,4) as SSN
FROM Employees
WHERE 
    (
        (LastName like '%' + ISNULL(@LastName, '') + '%')
            AND 
        (FirstName like '%' + ISNULL(@FirstName, '') + '%')
    )
AND
    (SSN = @SSN)

如果提供了@SSN,我只想执行AND。还是有其他方法可以做到这一点?

如果提供了SSN,则所有记录均由查询的LastName /
FirstName部分返回。如果仅提供姓氏/名字,则AND会这样做,因此不会返回任何记录,因为SSN无法验证。

有想法吗?

附加说明

假定一个基本记录集:

First          Last          SSN  
Mike           Smith         123456789  
Tom            Jones         987654321

如果我们更改了上面的过程,那么它不包括以下块:

AND
    (SSN = @SSN)

那么只要我们传递了FirstName或LastName,一切就可以很好地工作。但是我希望能够包括SSN(如果提供了一个)。

如果将AND更改为OR,则由于查询的FirstName / LastName部分的求值结果为:

WHERE (LastName like '%%' and FirstName like '%%')

(当然,它将返回所有记录)

如果我无法有条件地中止AND,则希望获得以下类似信息:

AND
    (SSN like ISNULL(@SSN, '%'))

:-)


问题答案:

改变:

AND (SSN = @SSN)

到:

AND (SSN = @SSN or @SSN is null)

如果SSN从不为空,则还可以执行以下操作:

AND SSN = ISNULL(@SSN, SSN)


 类似资料:
  • 问题内容: 当前试图用a编写select语句,并且搜索条件使我有些悲痛。 目的是搜索具有3种不同参数类型的表,并相应地对输出进行排名。(下面是我的代码示例) 关键搜索条件(必须且加权为1) 其他必备(加权.8) 很高兴(加权.5) SQL: 上面的语句不返回任何内容,我怀疑它是否有可能以上述方式堆叠术语。 返回的结果必须同时拥有会计和经理,并且很高兴拥有Excel 有什么建议可以实现这一目标吗?

  • 我正在尝试更新数据库表。如果表单中的密码为空,我如何通过提供一个条件来防止表单中的密码(“memberpassword”,$pass)被sql代码更新?有可能吗?

  • 问题内容: 是否可以做这样的事情: 我尤其要在除法结果值上放置一个where条件 问题答案: 这可以通过HAVING子句完成: 注意:添加了放置语句的位置 查询优化器也不应该多次计算平均值,因此在这里不必担心。 正如@jagra的答案中提到的那样,您应该可以使用而不是

  • 问题内容: 问题:我有一个SQL函数,该函数返回文件列表 现在,我应该使用联合将其他列表加入该列表,但前提是用户是admin。 那可能吗?就像是: 问题答案:

  • 问题内容: 我想根据当前行的值确定JOIN列。 例如,我的工作表有4个日期列:offer_date,accepted_date,start_date,reported_date。 我想根据日期查询汇率。我知道reported_date永远不会为空,但这是我的最后选择,因此我有一个优先顺序要加入到exchange_rate表中。如果这是正确的方法,我不太确定如何使用CASE语句执行此操作。 问题答案

  • 主要内容:AND 运算符,OR 运算符SQL 中的 AND 和 OR 运算符用来连接多个查询条件,以缩小返回的结果集,它们被称为连接符。 AND 运算符 AND 运算符用于连接 WHERE 子句中的多个查询条件,只有当这些查询条件都被满足时,数据行(记录)才会被选取。 语法 WHERE 子句中 AND 运算符的基本语法如下: SELECT column1, column2, columnN FROM table_name WHERE