查询结果的动态排序(5)

来源:互联网 发布:如何登陆淘宝联盟 编辑:程序博客网 时间:2024/05/15 01:36
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
五、用户定义函数

  如果你使用的是2000,想要编写一个用户定义的函数(UDF),这个用户定义函数接受列的名字或编号为参数、返回排序的结果集,Listing10显示了大多数程序员当成第一选择的方法。

【Listing10:列名字作为参数,使用UDF】

CREATEFUNCTIONufn_GetSortedShippers

(

@ColNameASsysname

)

RETURNSTABLE

AS

RETURN

SELECT*

FROMShippers

ORDERBY

CASE@ColName

WHEN'ShipperID'THENCASESIGN(ShipperID)

WHEN-1THEN'-'

WHEN0THEN'+'

WHEN1THEN'+'

ELSENULL

END+

RIGHT(REPLICATE('0',10)+

CAST(ABS(ShipperID)AS

varchar(10)),10)

WHEN'CompanyName'THENCompanyName

WHEN'Phone'THENPhone

ELSENULL

END

  但是,SQLServer不接受这个函数,它将返回如下错误信息:

Server:Msg1033,Level15,State1,Procedureufn_GetSortedShippers,

Line24

TheORDERBYclauseisinvalidinviews,inlinefunctions,and

subqueries,unlessTOPisalsospecified.

  注意错误信息中的“unless”。SQLServer2000不允许在视图、嵌入式UDF、子查询中出现ORDERBY子句,因为它们都应该返回一个表,表不能指定行的次序。然而,如果使用了TOP关键词,ORDERBY子句将帮助确定查询所返回的行。因此,如果指定了TOP,你还可以同时指定ORDERBY。由于在带有TOP的UDF中允许使用ORDERBY子句,你可以使用一个技巧:把“SELECT*”替换成“SELECTTOP100PERCENT*”。这样,你就能够成功地构造出一个接受列名字或编号为参数、返回排序结果的函数。

  新构造的函数可以按照如下方式调用:

SELECT*FROMufn_GetSortedShippers('ShipperID')

  现在,你已经了解了几种用参数确定查询输出中记录次序的方法。在编写那些允许用户指定查询结果排序标准的列的应用程序时,你可以使用本文介绍的各种技术,用列名字或编号作为参数,构造出使用CASE表达式和动态执行能力的各种方案。

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击