Одним из возможных решений может быть использование CASE WHEN ELSE
в предложении WHERE
CREATE PROCEDURE Proc1 (
@xzone varchar(50),
@yregion varchar(50),
...
)
AS
BEGIN
select *
from MyDatabase
where
xzone like '%' + case when @xzone is null then '' else @xzone end +'%'
and
yregion like '%' + case when @yregion is null then '' else @yregion end +'%'
and
...
END
Это недостаточно для больших таблиц, но выполняет то, что вам нужно, только в одном запросе.
Чтобы вызвать процедуру, используйте
using (SqlConnection con = new SqlConnection(...)) {
using (SqlCommand cmd = new SqlCommand("Proc1", con)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@xzone", SqlDbType.VarChar).Value = ...;
cmd.Parameters.Add("@yregion", SqlDbType.VarChar).Value = ...;
...
con.Open();
SqlDataReader r = cmd.ExecuteReader();
...
}
}
. Чтобы присвоить dB NULL, вы можете сделать
=(string.IsNullOrEmpty(s) ? (object)DBNull.Value : s);
=(object)s ?? DBNull.Value;