我熟悉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条件?
答案 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。希望有所帮助。