【Listing 5:用列名字作为参数,第三次尝试】
ALTER PROC GetSortedShippers
@ColName AS sysname
AS
SELECT *
FROM Shippers
ORDER BY
CASE @ColName
WHEN @#ShipperID@# THEN CASE SIGN(ShipperID)
WHEN -1 THEN @#-@#
WHEN 0 THEN @#+@#
WHEN 1 THEN @#+@#
ELSE NULL
END +
RIGHT(REPLICATE(@#0@#, 10) +
CAST(ABS(ShipperID) AS varchar(10)), 10)
WHEN @#CompanyName@# THEN CompanyName
WHEN @#Phone@# THEN Phone
ELSE NULL
END
如果ShipperID的值都是正数,加上符号前缀就没有必要,但为了让方案适用于尽可能多的范围,本例加上了符号前缀。排序时“-”在“+”的前面,所以它可以用于正、负数混杂排序的情况。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/