Гибкий поиск клиентского SQL - PullRequest
3 голосов
/ 26 октября 2010

Человек

| 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 ]

2 голосов
/ 26 октября 2010

Любой NULL в параметре должен соответствовать любому значению в таблицах.Всякий раз, когда вы сравниваете параметр с полем таблицы, ИЛИ это сравнение с тестом для нулевого параметра:

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

, а затем И все эти сравнения вместе составляют ваш поиск.

Сравнение сномер телефона, если номер телефона равен NULL, приведет к тому, что если у них будет более одного номера телефона, будет более одной строки, поэтому выберите DISTINCT для p_id.

Что Клиент должен делать с запросом?Вы не выбираете ни одно поле в этой таблице и не возвращаете никаких значений из процедуры.

1 голос
/ 26 октября 2010

ваш оператор where может выглядеть примерно так

where (f_name = @f_name or @f_name is null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...