三、用列号作为参数
就象第一个方案所显示地那样,你也许更喜欢用列的编号作为参数,而不是使用列的名字(列的编号即一个代表你想要作为排序依据的列的数字)。 这种方法的基本思想与使用列名字作为参数的思想一样:case表达式根据指定的列号确定使用哪一个列进行排序。listing 7显示了修改后的getsortedshippers存储过程。
【listing 7:用列号作为参数】
alter proc getsortedshippers
@colnumber as int
as
select *
from shippers
order by
case @colnumber
when 1 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 2 then companyname
when 3 then phone
else null
end
当然,在这里你也可以使用richard的方法,避免order by子句中列数据类型带来的问题。如果要根据shipperid排序输出,你可以按照下面的方式调用修改后的getsortedshippers存储过程:
exec getsortedshippers 1
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器