【问题标题】:SQL Server 2005 WHERE Clause with like condition具有类似条件的 SQL Server 2005 WHERE 子句
【发布时间】:2012-03-05 23:04:26
【问题描述】:

我需要根据传递给存储过程的参数构建一个WHERE 子句。

例如:如果param1值为1则做like条件,

 @param1 like '%'+ product.Status + '%' 

否则我想忽略类似的条件,它会返回所有行......

我将如何在WHERE 子句中执行此操作?谢谢,

【问题讨论】:

  • 这是在 C#/VB 代码中还是在纯 TSQL 中?
  • 纯TSQL,是一个存储过程。
  • param1 怎么可能既等于 1 又像 '%'+ product.Status + '%'
  • 您想要 product.Status 列上的通配符匹配?
  • @Ben 你能澄清一下你的 Where 子句吗?目前还不清楚它的作用。

标签: sql sql-server-2005 stored-procedures


【解决方案1】:

@param1 like ISNULL('%'+ product.Status + '%', '%')

【讨论】:

    【解决方案2】:

    你必须使用IF 条件。试试这样的。

    if @param1 = 1
        Begin
            select * from tableName WHERE columnName like '%'+ product.Status + '%' 
        End
    else
        Begin
            select * from tableName WHERE columnName
        End
    

    【讨论】:

    • 我可以在if条件中只做where子句吗?我不希望选择被重复多次...
    • 我认为不可以,您可以仅将 InLine IFCase 用于列的指定条件。
    【解决方案3】:

    所以您需要根据参数更改 where 子句。使用sp_executesql:您可以将查询构建为字符串,因此您可以添加 where 子句 if @param = 1:

    declare @sql varchar(1024)
    declare @where varchar(1024)
    set @sql = N'SELECT field1, field2, field3 FROM myTable'
    set @where = N' WHERE columnName like '%'+ product.Status + '%''
    case when @param = 1 then concat(@sql,@where)
    execute sp_executesql @sql
    

    【讨论】:

      【解决方案4】:

      我从您的描述(不是代码)中猜想您想要如下查询:

      select *
      from product
      where ([Status] like '%' + @param1 + '%'
          or @param1 is null)
      

      这将返回与@param1 上的通配符匹配状态的所有产品,或者如果@param1 为空,则返回所有行。

      如果您在 where 子句中添加更多内容,我会使用括号。

      【讨论】:

        【解决方案5】:

        like 运算符需要两个参数:

        where ( @Param1 = 1 and product.Status like '%' + @Pattern + '%' ) or
          ( @Param1 = 2 and product.Voltage = 240 ) or
          ( @Param1 is NULL )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-18
          • 1970-01-01
          相关资源
          最近更新 更多