sql - 灵活搜索客户SQL

标签 sql stored-procedures

| p_id |姓名 |我的名字 |地址 |城市 |状态 |压缩 |

客户

| p_id |奖励积分|余额 |

Person_PhoneNum

| ppn_id | p_id |数|

主要问题是我想尝试制作一个检索存储过程,它可以通过任何人的字段以及电话号码或 p_id 进行搜索,但我希望它能够处理参数中的 NULL 值。下面是存储过程:

CREATE PROCEDURE RetrieveCust(
@p_id AS varchar(50),
@f_name AS varchar(50),
@l_name AS varchar(50),
@address AS varchar(50),
@city AS varchar(50),
@state AS varchar(50),
@zip AS varchar(50),
@number AS varchar(50))

AS
BEGIN

END

我知道我需要连接表才能匹配结果,但我不知道我可以做些什么来处理 NULL 值。任何帮助都会很棒!

最佳答案

参数中的任何 NULL 都应匹配表中的任何值。每当您将参数与表字段进行比较或与 null 参数的测试进行比较时:

( @f_name = f_name ) or ( @f_name is null )

然后将所有这些比较一起构成您的检索。

当电话号码为 null 时,如果他们有多个电话号码,则与电话号码的比较将导致不止一行,因此在 p_id 上选择 DISTINCT。

客户与查询有什么关系?您没有在该表中的任何字段上进行选择,并且您似乎没有从过程中返回任何值。

关于sql - 灵活搜索客户SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4020192/

相关文章:

mysql - 将 int 添加到 date SQL

sql - 如何从 SQL Server 中的存储过程生成 csv 输出文件

tsql - 如何更新 T-SQL 记录并忽略 NULL 参数上的 UPDATE

sql - 在另一个表的两行之间加入表示 "transfer"的表

java - JOOQ Mysql 整合问题

sql - 从 select 中插入多行到另一个表中

mysql - 带 Pivot 的存储过程不返回结果结构,而是返回零值

stored-procedures - 编译存储过程挂起 Oracle SQL Developer

mysql - 我的第一个存储过程出错 - 救命!

sql - JOIN ON 与 WHERE 中的 Oracle SQL 查询过滤器