灵活搜索客户SQL

时间:2010-10-26 02:09:00

标签: sql stored-procedures

| p_id | n_name | l_name |地址|城市|州| zip |

客户

| p_id | reward_points |平衡|

Person_PhoneNum

| ppn_id | p_id |号码|

主要问题是我想尝试制作一个可以通过Person的任何字段以及电话号码或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值。任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

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

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

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

如果电话号码为空,则与电话号码进行比较,如果有多个电话号码,则会导致多一行,因此请在p_id上选择DISTINCT。

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

答案 1 :(得分:1)

你的where语句可能是这样的

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