...@Sort bit)
AS
SELECT
..............
我只想在Sort = true
时才Order
我怎么能意识到它?
谢谢。
答案 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不会为你排序它,因为如果没有指定排序,返回的行是非确定性的顺序)?