当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 数据库查询结果的动态排序(6)

MSSQL
如何在把超过固定长度的文字以……表示
精彩的近乎完美的分页存储过程
关于SQL Server SQL语句查询分页数据的解决方案
删除Access数词库中的空记录
在SQLSERVER2005中实现素数计算
经常用到的交叉表问题,一般用动态SQL能生成动态列!
sql server存储过程、存储函数的加密、解密
在SQL Server 2005中查询表结构及索引
取得拼音字头的存储过程
SQL Server自动备份无法删除过期的备份文件
未与信任SQL Server连接相关联的解决方法
小結SQL Server連接失敗錯誤及解決
SQL Server2000+JDBC常见问题及解决
PL/SQL实现Oracle数据库任务调度
Oracle中捕获问题SQL解决CPU过渡消耗
SQL Server 某些条件下求某日的日期
如何保持Oracle数据库的优良性能
SQL Server05 M 3.0 中复制和远程数据访问功能的技术对比
sql server平台用存储过程进行分页的两种方法
sql server 2000中循环插入100万条数据

MSSQL 中的 数据库查询结果的动态排序(6)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 87 ::
收藏到网摘: n/a

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