在公共新闻组中,一个经常出现的问题是“怎样才能根据传递给存储过程的参数返回一个排序的输出?”。在一些高水平专家的帮助之下,我整理出了这个问题的几种解决方案。
一、用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查询——在这里是三个。
http://www.bkjia.com/phpjc/631158.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/631158.htmltecharticle在公共新闻组中,一个经常出现的问题是“怎样才能根据传递给存储过程的参数返回一个排序的输出?”。在一些高水平专家的帮助之下,...