代码之家  ›  专栏  ›  技术社区  ›  eugeneK

有没有办法避免TSQL中的条件?

  •  0
  • eugeneK  · 技术社区  · 15 年前

    我正在使用SQL Server 2005和asp.net C。

    我的网站上有一个不同参数的搜索查询。

    fromAge as tinyint
    toAge as tinyint
    fromHeight as tinyint
    toHeight as tinyint
    gender as tinyint
    withImage as bit
    region as tinyint
    astrologicaSign as tinyint
    

    我从第一次执行搜索时得到这些参数,并将其搜索首选项保存在搜索表中,然后在上使用它们 Users 我从中选择符合要求的用户的表。

    有些值可以是有条件的,例如withImage(位),这意味着现在我需要if语句来检查我是否为withImage提供了0或1,然后执行select ie。如果withImage=1,那么查询的where将是picture1<>'0'else完全没有where条件。

    我最终得到了10个带有初始查询的嵌套if语句(为了示例,我简化了这些语句)。

    除了动态SQL之外,还有其他方法可以避免它吗?

    3 回复  |  直到 8 年前
        1
  •  1
  •   Coding Flow    15 年前

    如果可以将要传递的参数值与要检索的值对齐(或者至少总是进行equals比较),那么可以在非常有效的情况下使用CASE

    SELECT * FROM User 
    WHERE picture1 = CASE WHEN @WithImage = 1 THEN @withImage ELSE picture1 END
    

    如果参数为1,则将picture1字段与参数进行比较;如果参数为1,则将字段与自身进行比较。

        2
  •  2
  •   Joel Mansford    15 年前

    这很简单,可以使用AND语句来实现

    SELECT * FROM User 
    WHERE (withImage =1 AND picture1<>'0') OR withImage=0
    

    然后可以为每个元素添加类似的子句。注意,如果逻辑变得更复杂,还可以在WHERE子句中使用CASE语句。

        3
  •  0
  •   HLGEM    15 年前

    其他人已经给了您一个解决方案,但老实说,这是一个动态SQL有可能提高性能的情况。我不太喜欢动态SQL,但这是一个它比其他任何东西都做得更好的例子。