动态 sql 中的按案例语句排序

Order by case statement in dynamic sql

我有一个名为 @Sorter 的参数,它传递一个 int(1 表示按一组特定的列排序,0 表示按另一组列排序)。

在我的动态 SQL 中,当用户在执行过程时将 1 传递给该参数时,我让它工作。

' ORDER BY CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List END ASC,
        ''Year'', ''MonthNum'' DESC, i.Item ASC'

问题是当我尝试添加一个案例时,当参数从用户那里获得值 0 时,它开始抱怨。比如下面的:

' ORDER BY CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List END ASC,
           CASE WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END ASC,
            ''Year'', ''MonthNum'' DESC, i.Item ASC'

错误是一个常数。

您不需要额外的 case 语句,试试这个:

' ORDER BY CASE ''' + cast(@Sorter as varchar(1))+ ''' WHEN '1' THEN l.List
                                WHEN '0' THEN ''Variance'' END ASC,
            ''Year'', ''MonthNum'' DESC, i.Item ASC'

你必须使用一个 case when 语句。

ORDER BY 
     (CASE WHEN + ''' + @Sorter + ''' = 1 THEN l.List
           WHEN + ''' + @Sorter + ''' = 0 THEN ''Variance'' END) ASC,
      ''Year'', ''MonthNum'' DESC, i.Item ASC'