代码之家  ›  专栏  ›  技术社区  ›  C Sharper

在sql中使用where子句条件

  •  0
  • C Sharper  · 技术社区  · 7 年前

    我想在tablename条件中使用where子句 当我的变量@col1为空时,我不想将where与@col1一起使用,它应该检查@col2 如果@col2也为空,则返回所有记录。 或者检查变量中各自的条件/值。

    declare @col1 nvarchar(50)=''
    declare @col2 nvarchar(50)=''
    select * from TableName
    where
    (isnull(@col1 ,'')!='' AND col1 =@col1 )
    OR
    (isnull(@col2 ,'')!='' AND col2 =@col2 )
    

    当@col1或@col2为空时,不返回任何记录。

    相反,当两者都为空时,它应该返回所有记录, 如果其中任何一个包含任何值,那么它应该符合该条件。

    编辑:不允许动态SQL

    3 回复  |  直到 7 年前
        1
  •  1
  •   George Menoutis    7 年前

    尝试:

    declare @col1 nvarchar(50)=''
    declare @col2 nvarchar(50)=''
    select * from TableName
    where
    (isnull(@col1 ,'')='' OR col1 =@col1 )
    OR
    (isnull(@col2 ,'')='' OR col2 =@col2 )
    OPTION (RECOMPILE)
    

    这是在没有动态sql的情况下处理动态条件的方法

        2
  •  1
  •   Alfin E. R.    7 年前

    你可以用

    declare @col1 nvarchar(50)=''
    declare @col2 nvarchar(50)=''
    select * from TableName
    where
    ( col1 LIKE ISNULL(@col1, '%' )
    AND
    ( col2 LIKE ISNULL(@col2, '%' )
    

    当@variable为空时,它将设置为类似“%”的筛选器,该筛选器将返回所有值

    我把逻辑改成了and,因为,根据假设,如果两个@variable都有值,那么不应该是显示数据来限定这两个值吗?这就引出了逻辑。这可能需要考虑

        3
  •  1
  •   pankaj singh    7 年前

    为此创建动态查询

    声明@col1 nvarchar(50)=”

    声明@col2 nvarchar(50)=”

    声明@sql nvarchar(500)

    设置@sql='select*from tablename'

    如果(@ COL1!= ' ')
    开始

    设置@sql=@sql+,其中col1='+@col1+''

    结束 执行SQL