存储过程:排序或不排序:选项

时间:2010-03-01 13:03:12

标签: sql

...@Sort bit) 
AS                
     SELECT
..............

我只想在Sort = true

时才Order

我怎么能意识到它?

谢谢。

4 个答案:

答案 0 :(得分:7)

我没想到这个工作我必须承认,但确实如此。在这个例子中,如果@sort设置为true,我们按城镇排序,否则,我们使用其他一些默认排序(必须与排序列的类型相同)。

DECLARE @sort bit
SET @sort = 0

SELECT [addressId]
      ,[customerId]
      ,[addressTypeId]
      ,[address1]
      ,[address2]
      ,[address3]
      ,[town]
      ,[county]
      ,[postcode]
      ,[countryCode]
FROM
    [dbo].[tblAddress]
ORDER BY
    CASE
        WHEN @sort = 1 THEN town
        ELSE 'A'
    END ASC

根据评论建议编辑。

答案 1 :(得分:5)

...
ORDER BY
    CASE
        WHEN @sort = 1 THEN sortcolumn
        ELSE 1 --constant value with same type of "sortcolumn" eg '19000101' or 'a'
    END

答案 2 :(得分:1)

您测试@sort参数的值并相应地执行不同的查询。

使用IF:

IF (@sort = 0)
  SELECT...
ELSE
  SELECT... 
  ORDER BY ....

使用CASE:

SELECT ...
ORDER BY
  CASE
    WHEN @sort = 1 THEN xxx
    ELSE 1
  END

答案 3 :(得分:0)

假设你正在使用SQL Server(一个很大的假设) - This post很好地描述了一个使用动态sql的方法(你几乎肯定不应该做b / c sql server将无法优化)程序。

但无论采用哪种方法,你为什么要这样做?增加条件排序的复杂性几乎肯定不是最好的写入一个总是返回排序数据的良好存储过程(具有适当的索引)。为什么你会特别需要未排序的数据(即使你确实需要它未分类,也不能保证SQL不会为你排序它,因为如果没有指定排序,返回的行是非确定性的顺序)?