Не получается сделать универсальный SQL запрос для разных комбинаций заполненных полей в WinForms

Не получается сделать универсальный запрос. Хочу сделать так, чтобы в зависимости от заполненных полей производился поиск по БД, но при попытке поиска выдает просто всю таблицу...

"SELECT h.Name, h.Surname, h.Middle_name, h.Birthday, h.PhoneNumber, a.Name, h.House_number, h.Flat FROM dbo.Humen as h JOIN dbo.Addresses as a on h.Address_id=a.Id " +
"WHERE (h.Name = @humanName OR h.Name LIKE '%') " +
"AND (h.Surname = @surname OR h.Surname LIKE '%') " +
"AND (h.Middle_name = @middleName OR h.Middle_name LIKE '%') " +
"AND (h.Birthday = @birthday OR h.Birthday IN (SELECT Birthday FROM dbo.Humen)) " +
"AND (h.PhoneNumber = @phoneNumber OR h.PhoneNumber LIKE '%') " +
"AND (a.Name = @addressName OR a.Name LIKE '%') " +
"AND (h.House_number = @houseNumber OR h.House_number IN (SELECT House_number FROM dbo.Humen)) " +
"AND (h.Flat = @flat OR h.Flat IN (SELECT Flat FROM dbo.Humen));"

Ответы (1 шт):

Автор решения: Дмитрий

Корректный запрос

"SELECT h.Name, h.Surname, h.Middle_name, h.Birthday, h.PhoneNumber, a.Name, h.House_number, h.Flat FROM dbo.Humen as h JOIN dbo.Addresses as a on h.Address_id=a.Id " +
"WHERE (h.Name = @humanName OR @humanName IS NULL) " +
"AND (h.Surname = @surname OR @surname IS NULL) " +
"AND (h.Middle_name = @middleName OR @middleName IS NULL) " +
"AND (h.Birthday = @birthday OR @birthday IS NULL) " +
"AND (h.PhoneNumber = @phoneNumber OR @phoneNumber IS NULL) " +
"AND (a.Name = @addressName OR @addressName IS NULL) " +
"AND (h.House_number = @houseNumber OR @houseNumber IS NULL) " +
"AND (h.Flat = @flat OR @flat IS NULL);"

Так как если в WinForm не заполнить поле, на вход запрос поступит пустая строка. А из запроса следует, что необходимо не учитывать параметр, если он null, к примеру @addressName. Поэтому меняем пустые строки на DBNull.Value.

command.Parameters.Add("@addressName", SqlDbType.NVarChar).Value =
    model.AddressName.Equals("") ? DBNull.Value : model.AddressName;
→ Ссылка