如何使用动态where子句编写SQL语句?

如何使用动态where子句编写SQL语句?,sql,stored-procedures,where,nullable,Sql,Stored Procedures,Where,Nullable,我有一个需要根据用户输入返回行的存储过程。上的参数可以有3个不同的值。该值由用户从提示中提供,可以是“A”、“B”或“AB”,这意味着用户希望查看带有A和B的记录 这是测试查询: declare @prefix char(10) = 'Region' declare @region char(2) = '90' declare @year int = 2015 declare @month int = 03 declare @day int = 01 declare @option char(1

我有一个需要根据用户输入返回行的存储过程。上的参数可以有3个不同的值。该值由用户从提示中提供,可以是“A”、“B”或“AB”,这意味着用户希望查看带有A和B的记录

这是测试查询:

declare @prefix char(10) = 'Region'
declare @region char(2) = '90'
declare @year int = 2015
declare @month int = 03
declare @day int = 01
declare @option char(1) = null -- default, can be 'A', 'B', or both.

select
  t1.ControlNumber, 
  t1.CustomerName,
  t1.CustomerStatement
  case
    when    sr.ControlNUmber is not null
    then    rtrim(ltrim(@prefix))
            + @region+ '\' + 'Folder1\'     
    else    rtrim(ltrim(@prefix)) + 
            + @region+ '\' + 'Folder2\'
    end as Location
  from Table1 t1
  inner join Table2 t2 ON t1.CustomerStatement = t2.CustomerStatement 
  left join tblControl c on t1.ControlNumber = c.ControlNumber 
  where (s.StatementOption = @sOption)
  and s.FileYear = @FILEYEAR
  and s.FileMonth = @FILEMONTH
  and s.FileDay = @FILEDAY
  and s.BackendType = 1
  and s.Region = @REGION 
我正在寻找编写
where
子句的方法,它允许测试3个选项(“a”、“B”或“AB”)中的一个

在我的c代码中,我将
@option
参数发送为
nullable

SqlParameter sOption = command.Parameters.Add("@sOption", SqlDbType.Char);
sOption.Direction = ParameterDirection.Input;
sOption.Value = (object)option ?? DBNull.Value;
因此,如果用户输入'AB'选项,则默认为null:

switch (option)
{
   case "E":
     option = "S";
     break;
   case "P":
     option = "N";
     break;
   default:
     option = null;
     break;
}
这意味着用户希望获得同时具有这两个选项的记录

实现这一目标的最佳方式是什么


我希望我能把我的问题说清楚

你面临的问题是什么。。。我明白你的意思了,我已经完成了处理你想要的事情。。您只需使用用户输入设置sOption
(s.StatementOption=@sOption或@sOption为NULL)
,然后阅读以下内容: