现在,如果我们用任意三个列名字之一作为参数调用存储过程,存储过程都能够正确地返回结果。richard romley提出了一种巧妙的处理方法,如listing 6所示。它不再要求我们搞清楚可能涉及的列数据类型。 这种方法把order by子句分成三个独立的case表达式,每一个表达式处理一个不同的列,避免了由于case只返回一种特定数据类型的能力而导致的问题。
【listing 6:用列名字作为参数,romley提出的方法】
alter proc getsortedshippers
@colname as sysname
as
select *
from shippers
order by
case @colname when 'shipperid'
then shipperid else null end,
case @colname when 'companyname'
then companyname else null end,
case @colname when 'phone'
then phone else null end
按照这种方法编写代码,sql server能够为每一个case表达式返回恰当的数据类型,而且无需进行数据类型转换。但应该注意的是,只有当指定的列不需要进行计算时,索引才能够优化排序操作。
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 注册表 操作系统 服务器 应用服务器