我正在使用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(bit)这意味着现在我需要if语句检查我是否为withImage提供了0或1然后执行select ie 。如果withImage = 1,那么查询的地方将是picture1<>'0'否则没有where条件。
我最终得到了10个带有初始查询的嵌套if语句(我简化了这个例子)。
除了动态SQL之外,有没有办法避免它?
答案 0 :(得分:2)
使用AND语句
非常简单SELECT * FROM User
WHERE (withImage =1 AND picture1<>'0') OR withImage=0
然后,您可以为每个元素添加类似的子句。请注意,如果逻辑变得更复杂,您还可以在WHERE子句中使用CASE语句。
答案 1 :(得分:1)
如果你可以将你传递的参数值对齐你想要检索的值(或者至少总是等于比较),那么你可以像这样使用CASE WHEN
SELECT * FROM User
WHERE picture1 = CASE WHEN @WithImage = 1 THEN @withImage ELSE picture1 END
这样就是将picture1字段与参数进行比较(如果为1)或将字段与自身进行比较(如果不是。)
答案 2 :(得分:0)
其他人已经为您提供了解决方案,但老实说,这是动态SQL可能提高性能的一种情况。我不是一个很有活力的SQL粉丝,但这是一个比大多数其他东西做得更好的情况。