SQL Server动态排序依据

前端之家收集整理的这篇文章主要介绍了SQL Server动态排序依据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在存储过程中使用动态顺序,因此我可以将我想要的数据作为参数传递给存储过程.这适用于VARCHAR字段但是如果我尝试对int或datetime字段进行排序,则会使我的代码出错,如下所示
DECLARE @ORDERBY INT
SET @ORDERBY = 1
SELECT TOP 10 * FROM TBL_LMS_USERS_RECORDs_LAST_ATTEMPT
ORDER BY 
CASE 
    WHEN @OrderBy = 1 THEN s10_record_dow
    --WHEN @OrderBy = 2 THEN pk_big_record_id
    else s10_record_dow
END

如果我在case语句中取消注释第二个WHEN,则会出错

“Error converting data type varchar to bigint.”

如果我不使用case语句,我可以通过这个字段订购.

有任何想法吗?

解决方法

把它改成这个:
SELECT TOP 10 * FROM TBL_LMS_USERS_RECORDs_LAST_ATTEMPT
ORDER BY 
    CASE WHEN @OrderBy = 1 THEN s10_record_dow ELSE NUll END,CASE WHEN @OrderBy = 2 THEN pk_big_record_id ELSE NULL END,CASE WHEN @OrderBy <> 1 AND  @OrderBy <> 2 THEN s10_record_dow 
         ELSE NULL 
    END

猜你在找的MsSQL相关文章