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