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

MSSQL
精通数据库系列之入门:基础篇1
剖析SQL Server 2005查询通知之基础篇
用sp_lock诊断SQL Sever的性能问题
测试SQL Server业务规则链接方法
解析SQL Server数据应用在不同的数据库中
如何使用SQL Server数据库中查询累计值
逐行扫描 为你讲解几个基本SQLPLUS命令
教你一招:MSSQL数据库索引的应用
确定几个SQL Server栏中的最大值
SQL Server 2005分析服务 统一整合视图
如何使用SQL Server嵌套子查询
用TableDiff产生SQL Server同步脚本
小型商业应用选SQL Server还是Access
用SQL Server Having计算列和平均值
SQL Server 2005基于消息的应用程序介绍
在SQL Server实例之间传输登录和密码
SQL Server 2005深层工具和运行时间集
SQL Server数据库增强版备份体验
使用SQL Server 2000日志转移实现高可用性
浅谈Linq To Sql集成数据库语言的优劣

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 129 ::
收藏到网摘: 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查询——在这里是三个。