2014-02-09 23 views
0

我越来越熟悉如何存储过程在MSSQL 2012年工作发送参数的存储过程,并使用IF ELSE通过现场ASC-递减订购

我有一个表叫用户:

Users 
------ 
UserId 
FirstName 
LastName 
CardNumber 

我想要一个存储过程,我给它什么字段排序,如果它是asc或desc顺序。

SELECT * FROM dbo.Users 
if @filtername == "FirstName" && @filterorder == "DESC" 
    ORDER BY FirstName DESC 
else 
    ORDER BY FirstName ASC 

如何在我的SQL查询中创建一个简单的IF ELSE条件?

回答

0

我知道这不是真正解决你的问题,但最好的方法是使用表示层来做到这一点。无论是在应用程序(see link)或报告服务等

但是,如果你必须从存储过程中做到这一点,你可以使用动态sql(我宁愿避免这种情况,如果可能)或...

IF @filtername == "FirstName" && @filterorder == "DESC" 
    SELECT UserId, FirstName, LastName, CardNumber 
    FROM dbo.Users 
    ORDER BY FirstName DESC 
ELSE IF @filtername == "FirstName" && @filterorder == "ASC" 
    SELECT UserId, FirstName, LastName, CardNumber 
    FROM dbo.Users 
    ORDER BY FirstName ASC 

如果数据采集部分是比较复杂的,然后使用临时表来收集数据,然后做上述尝试...

如果你可以离开了filterorder一块吧......你可以其实这样做...

declare @filtername varchar(100) = 'FirstName' 

select <columnlist> from dbo.Users 
order by case when @filtername = 'FirstName' then FirstName end DESC 

因此,使用底部方法来确定要过滤哪个列......然后使用顶部方法(if/else)来确定ASC/DESC。希望有所帮助。

+0

您的第二个解决方案(案例构造)的性能远远低于我的经验可以接受的程度,执行计划可能会变得非常糟糕。只要坚持第一个建议.... – Paul

+0

@保罗,我完全同意你的意见。 –