Ваш запрос:
SELECT
FormMaster.NameofCompany,
VisitorMaster.NameofVisitor,
VisitorMaster.PassportNumber,
FormMaster.FormID,
VisitorMaster.VisitorID
FROM
VisitorMaster INNER JOIN VisitorDetails ON
VisitorMaster.VisitorID = VisitorDetails.VisitorID
INNER JOIN FormMaster ON VisitorDetails.FormID = FormMaster.FormID
WHERE
(FormMaster.FormStatusID = 1) AND
(VisitorMaster.PassportNumber = @PassportNumber ) OR
(VisitorMaster.NameofVisitor = @NameofVisitor) OR
(FormMaster.NameofCompany = @NameofCompany )
Вы уверены, что он работает правильно? Если FormMaster.FormStatusID
не равно 1 и один из двух последних критериев верен, он все равно вернет эту строку. AND
имеет более высокий приоритет, чем OR
в TSQL.
Правильно, ваше WHERE
предложение должно быть:
FormMaster.FormStatusID = 1 AND (
VisitorMaster.PassportNumber = @PassportNumber OR
VisitorMaster.NameofVisitor LIKE @NameofVisitor OR
FormMaster.NameofCompany LIKE @NameofCompany)
И добавьте% к параметрам @NameofVisitor и @NameofCompany, которые вы передаете. Делая так, как предлагают Shawn или WebMatrix, вы сопоставите все, если не передадите что-то, тогда как LIKE '' соответствует только пустой строке.