代码之家  ›  专栏  ›  技术社区  ›  Martin

SQL Server:动态排序依据,如果输入参数为空,则不排序依据?

  •  1
  • Martin  · 技术社区  · 15 年前

    我正试图修改一个必须包含输入参数的存储过程 @OrderBy .

    但我需要测试它,如果它是空的,那么不包括 ORDER BY SELECT SQL语言

    如果不为空,我想按 @订货人

    这可能吗?

    提前谢谢

    2 回复  |  直到 15 年前
        1
  •  6
  •   John Hartsock    15 年前

    您可以使用动态SQL实现这一点

    Declare @dynamicSQL nvarchar(5000);
    Declare @orderBy nvarchar(50);
    
    Set @orderBy = 'column1';
    
    Set @dynamicSQL = 'Select * from Table ';
    
    If (@orderBy IS NOT NULL) BEGIN
      @dynamicSQL = @dynamicSQL + 'Order BY ' + @orderBy;
    END
    
    exec @dynamicSQL;
    
        2
  •  0
  •   Dave Markle    15 年前

    唯一的方法就是使用动态SQL,但是CASE语句通常也能正常工作:

    SELECT *
    FROM foo f
    ORDER BY CASE WHEN @OrderBy IS NULL THEN f.Whatever ELSE '' END
    
    推荐文章