Помогите написать процедуру
От: Gudzik Германия  
Дата: 03.10.07 07:23
Оценка:
Привет! Необходимо решить такую задачу.
Имеется четыре таблицы: person, profession, qualification, organization. Последние три таблицы связаны с первой как "много ко многим" при помощи доп. таблиц (person2profession, person2qualification, person2organization). Стоит задача написать хранимую процедуру которая будет принимать три параметра: @ProfessionID, @QualificationID, @OrganizationID. Каждый параметр может содержать либо значение ключевого поля соответствующей таблицы либо НОЛЬ. В процедуре нужно выбрать значения из person, отфильтрованные по полям ProfessionID, QualificationID, OrganizationID из соотв. таблиц. Что-то вроде:
SELECT * FROM person
INNER JOIN person2profession ON person2profession.personID = person.personID
INNER JOIN person2qualification ON person2qualification .personID = person.personID
INNER JOIN person2organization ON person2organization .personID = person.personID
WHERE person2profession.professionID = @ProfessionID
AND person2qualification.qualificationID = @QualificationID
AND person2organization.organizationID = @OrganizationID

Но вся проблема в том, что когда какой-то параметр процедуры (@ProfessionID, @QualificationID, @OrganizationID) принимает нулевое значения, он не должен участвовать в фильтрации. Помогите пожалуста докумекать как это грамотно реализовать (конечно же на первом месте производительность процедуры).
Спасибо.
Re: Помогите написать процедуру
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 03.10.07 08:03
Оценка: 2 (1)
Здравствуйте, Gudzik, Вы писали:

[]
G>Но вся проблема в том, что когда какой-то параметр процедуры (@ProfessionID, @QualificationID, @OrganizationID) принимает нулевое значения, он не должен участвовать в фильтрации.

Никакой проблемы, просто добавляешь выделенное жирным:

WHERE ( @ProfessionID=0 OR person2profession.professionID = @ProfessionID )


Ноль равен нулю, так? Если передашь ноль — второе условие (после OR) не отработает.

З.Ы. Скобки не забудь.
... << RSDN@Home 1.1.4 beta 7 rev. 452>>
Re[2]: Помогите написать процедуру
От: Gudzik Германия  
Дата: 03.10.07 08:18
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Никакой проблемы, просто добавляешь выделенное жирным:


F>
F>WHERE ( @ProfessionID=0 OR person2profession.professionID = @ProfessionID )
F>


Все гениальное — просто . Спасибо, это то что нужно!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.