2010-10-26 49 views
3

灵活的搜索客户SQL

| p_id | n_name | l_name |地址|城市|状态| zip |

客户

| p_id | reward_points |平衡|

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 

我明白,我需要联接表,以匹配的结果,但我不知道我可以做些什么来处理空值。任何帮助将是惊人的!

+0

刚刚为任何需要具体内容的人推测结果: – 2010-10-26 04:18:56

回答

2

在参数设置的任何NULL应符合表中的任何值。当你比较的参数表字段或通过测试的空参数对比:

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

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

如果电话号码为空时与电话号码的比较,如果它们具有多个电话号码,则会导致多行,所以请在p_id上选择DISTINCT。

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

+0

哈哈,我猜客户表对于我提出的问题并不需要。不过谢谢你,我有一种感觉,那就是那种直截了当的感觉。 – 2010-10-26 04:07:38

+0

很好的答案,比我的更具描述性和信息量,我更好地解除我的游戏! – campo 2010-10-27 02:55:34

1

您的where语句可以是这样的

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