将参数发送到存储过程并使用IF ELSE按field-asc-desc排序

时间:2014-02-09 17:34:59

标签: sql sql-server tsql sql-order-by

我熟悉MSSQL 2012上的存储过程如何工作。

我有一个名为Users的表:

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条件?

1 个答案:

答案 0 :(得分: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

如果数据收集部分比较复杂,那么尝试使用临时表收集数据然后执行上述操作...

如果你可以省略它的过滤顺序......你实际上可以这样做......

declare @filtername varchar(100) = 'FirstName'

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

因此,使用bottom方法确定要筛选的列...然后使用top方法(if / else)确定ASC / DESC。希望有所帮助。