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

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 中的 数据库查询结果的动态排序(1)


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

    在公共新闻组中,一个经常出现的问题是“怎样才能根据传递给存储过程的参数返回一个排序的输出?”。在一些高水平专家的帮助之下,我整理出了这个问题的几种解决方案。


一、用IF...ELSE执行预先编写好的查询


  对于大多数人来说,首先想到的做法也许是:通过IF...ELSE语句,执行几个预先编写好的查询中的一个。例如,假设要从Northwind数据库查询得到一个货主(Shipper)的排序列表,发出调用的代码以存储过程参数的形式指定一个列,存储过程根据这个列排序输出结果。Listing 1显示了这种存储过程的一个可能的实现(GetSortedShippers存储过程)。



【Listing 1: 用IF...ELSE执行多个预先编写好的查询中的一个】


CREATE PROC GetSortedShippers

@OrdSeq AS int

AS


IF @OrdSeq = 1

SELECT * FROM Shippers ORDER BY ShipperID

ELSE IF @OrdSeq = 2

SELECT * FROM Shippers ORDER BY CompanyName

ELSE IF @OrdSeq = 3

SELECT * FROM Shippers ORDER BY Phone





  这种方法的优点是代码很简单、很容易理解,SQL Server的查询优化器能够为每一个SELECT查询创建一个查询优化计划,确保代码具有最优的性能。这种方法最主要的缺点是,如果查询的要求发生了改变,你必须修改多个独立的SELECT查询——在这里是三个。