在SQL Server中按顺序排序

时间:2015-03-11 15:06:38

标签: sql sql-server vb.net

我在SQL Server中遇到了这个恼人的问题,我尝试添加ORDER BY @sortColumn

PROCEDURE [dbo].[pr_get_checklist_activity]
(
     @userId int,
     @sortColumn varchar
)
[...]
SELECT
    checklist.checklist_id,
    [etc]
[... SQL BLA BLA ...] 
ORDER BY 
    CASE WHEN @sortColumn = 'checklist_id' 
      THEN checklist.checklist_id END,
    CASE WHEN @sortColumn = 'percentage' 
      THEN checklist.afgerond_percentage END,
    CASE WHEN @sortColumn = 'aangemaakt_op' 
      THEN checklist.aangemaakt_op END;

现在,当我尝试使用类似的方式运行它时:

[dbo].[pr_get_checklist_activity] 19, 'percentage' 

[dbo].[pr_get_checklist_activity] 19, 'aangemaakt_op'

什么都没发生,结果是一样的。没有错误,没有变化...

我将它构建为SQL Server Management Studio中的存储过程并使用VB。

2 个答案:

答案 0 :(得分:2)

你的脚本运行得很好。一切似乎都没问题,除了一件小事:

@sortColumn varchar

这将使@sortColumn长1个字符。加上它的长度

ALTER PROCEDURE [dbo].[pr_get_checklist_activity]
(
 @userId int,
 @sortColumn varchar(40)

) as

这将修复您的脚本

答案 1 :(得分:1)

你的Order By条款应该是这样的:

ORDER BY 
CASE 
WHEN @sortColumn = 'checklist_id' THEN checklist.checklist_id
WHEN @sortColumn = 'percentage' THEN checklist.afgerond_percentage
WHEN @sortColumn = 'aangemaakt_op' THEN checklist.aangemaakt_op 
END;

您还应该为参数@sortColumn定义一个长度。 IIRC SQL Server只会指定长度为1。

所以你存储的proc定义应该是:

PROCEDURE [dbo].[pr_get_checklist_activity]
(
 @userId int,
 @sortColumn varchar(50)

)