2010-07-13 112 views
0

我正在使用SQL Server 2005与asp.net C#。有没有办法避免TSQL中的条件?

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

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语句,检查我是否提供0或1 withImage,然后执行选择ie。如果withImage = 1,那么查询的位置将是图片1 <>'0',否则根本没有条件。

我确实以10个嵌套if语句结束了初始查询(我简化了这个例子)。

是否有办法避免它,除了动态SQL?

回答

1

如果你可以对齐你逝去的是为要中检索值的参数值(或至少经常做的等于比较),那么你可以使用CASE WHEN相当efectively这样

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

这样,它是比较picture1字段与参数,如果它是1或比较该字段与自身,如果它不是。

2

这是使用AND语句

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

然后,您可以添加类似的条款为每个元素很简单地实现。请注意,如果逻辑变得更复杂,您还可以在WHERE子句中使用CASE语句。

+0

什么,但如果声明。想想10个嵌套的if。 – eugeneK 2010-07-13 12:04:36

0

其他人已经给你一个解决方案,但诚实,这是动态SQL可能提高性能的一种情况。我不是一个很大的动态SQL粉丝,但是这是一个比其他任何事情都做得更好的案例。

+0

真的吗?你确定。动态SQL更难以完全调试,更不用说SQL注入等。 关于性能,查询优化器应该处理这个绝对精细的跳过没有值传递的谓词。 – 2010-07-15 00:11:55

+0

http://www.sommarskog.se/dyn-search-2008.html – HLGEM 2010-07-15 13:39:29

相关问题