首页 > 开发 > 综合 > 正文

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表