我在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。
答案 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)
)