拼吾爱程序人生

首页 » 数据库编程 » SQL » 数据库查询结果的动态排序(6)
Systemjudge - 2007-8-6 17:00:00
现在,如果我们用任意三个列名字之一作为参数调用存储过程,存储过程都能够正确地返回结果。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表达式返回恰当的数据类型,而且无需进行数据类型转换。但应该注意的是,只有当指定的列不需要进行计算时,索引才能够优化排序操作。

 您可能对 [SQL] 的这些文章也感兴趣:

SQL之行列互变问题
通过sql语句获取数据库的基本信息
将指定日期所在月份的所有日期按照周次输出
跟NHibernate之夏一起学习NHibernate
SQL优化之使用 EXISTS 代替 IN 和 关联查询(inner join)
将一个表分开导出成不同文件的实用方法
提高SQL执行效率的几点建议
数据库管理员(DBA)日常必备的sql列表
SQL中的时间计算语句使用实例解答
SELECT @@IDENTITY中的@@含义及应用方法
SQL存储过程和触发不能使用USE的应对方法
根据规则自动生成序列号
1
查看完整版本: 数据库查询结果的动态排序(6)
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: