具有2个条件的SQL案例

C.J*_*.J. 1 sql sql-server stored-procedures

我有一个存储过程,将接受2个不同的参数.第一个参数将确定我要排序的列,第二个参数将确定它是否为ASCDESC

Create Procedure Some_SP
    @sortcolumn varchar(10)
    @sortorder varchar(10)
AS
    Select * from empTable
    Order by
         CASE @sortcolumn WHEN 'First_Name' THEN fname END,
         CASE @sortcolumn WHEN 'Last_Name' THEN lname END,
         CASE @sortcolumn WHEN 'ID' THEN empID END,
         CASE @sortorder WHEN 'ascending' THEN ASC END,
         CASE @sortorder WHEN 'descending' THEN DESC END
Run Code Online (Sandbox Code Playgroud)

它给了我语法错误.如何修复它以便我的CASE语句中有两个条件?

Jon*_*Jon 5

以下将有效:

Select * from empTable
Order by
CASE WHEN @sortcolumn = 'First_Name' AND @SortOrder = 'ascending' THEN fname END ASC,
CASE WHEN @sortcolumn = 'First_Name' AND @SortOrder = 'descending' THEN fname END DESC
Run Code Online (Sandbox Code Playgroud)

等等...

为了避免手动输入每个case语句,你可以编写一个用于创建它的"生成器"脚本(如果表定义会改变,则特别好):

SELECT 
    'CASE WHEN @SortColumn = ''' + C.name + ''' AND @SortOrder = ''ascending'' THEN ' + C.name + ' END ASC,' + CHAR(13) + CHAR(10) +
    'CASE WHEN @SortColumn = ''' + C.name + ''' AND @SortOrder = ''descending'' THEN ' + C.name + ' END DESC,'
FROM sys.columns C 
WHERE C.object_id = object_id('[Schema].[Table]')
Run Code Online (Sandbox Code Playgroud)