2014-02-11 5 views
0

Этот вопрос связан как с C#, так и с SQL Server.Поиск с несколькими параметрами в SQL Server

Я хочу выяснить, как выполнить пользовательский поиск.

У меня есть три таблицы

клиентов

CusId, Name, Telephone 

Сотрудник

EmpId, Name, Job 

Назначение

AppId, Date, EmpId, CusId 

В моей форме C# есть три флажка. Я хочу найти данные в соответствии с этими проверенными значениями.

Ex: когда выбраны флажки пользователей, сотрудников, приложений, я хочу найти данные в зависимости от всех этих трех значений.

Когда выбрано только два или один, я хочу выполнить поиск в зависимости от выбора. Здесь будет всего 6 комбинаций.

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

Должен ли я написать 6 хранимых процедур, чтобы получить результат?

Есть ли способы сделать это легко?

Пожалуйста, помогите мне исправить это. Заранее спасибо.

+1

Что вы уже пробовали, как вы обращаетесь к базе данных с C# (сущность framework, ADO.NET ...), можете ли вы использовать хранимые процедуры, составляете ли вы текстовый запрос (с параметрами для предотвращения SQL-инъекций)? Все это может изменить ответ, поэтому рассказывать нам, что вы попробовали, поможет ответить на вопрос. –

+0

Если вы используете EF, это тривиально. Если вы этого не сделаете, это все еще легко, но требует больше кода. Как вы получаете доступ к БД? На стороне примечание, 3 варианта делают для 8 комбинаций, а не 6 – Alex

+0

Да, я использую EF. :) – Daybreaker

ответ

1

С запроса, такие как ниже (хотел бы предложить в хранимых Proc):

-- Parameters to a SQL sproc 
DECLARE @CustID INT, @EmpID INT, @AppointmentID INT 

-- Set Parameters here for testing 

SELECT * 
FROM Appointment as A 
INNER JOIN Employee as E 
    ON E.EmpID = A.EmpId 
INNER JOIN Customer as C 
    ON C.CusID = A.CusID 
WHERE (@CustID IS NULL OR C.CUsID = @CustID) 
AND (@EmpID IS NULL OR E.EmpID = @EmpID) 
AND (@AppointmentID IS NULL OR A.AppID = @AppointmentID) 

Затем нужно передать в параметрах надлежащим образом, либо идентификатор, если выбран, или нулевой, если не фильтрации на одном пункт.

+0

ура ... это сработало. много хлопот. – Daybreaker

Смежные вопросы