查询结果的动态排序(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>
如果你使用的是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>
五、用户定义函数如果你使用的是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";/* 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>
- 查询结果的动态排序(5)
- 数据库查询结果的动态排序(5)
- 查询结果的动态排序
- 数据库查询结果的动态排序
- 查询结果的动态排序(4)
- 查询结果的动态排序(3)
- 查询结果的动态排序(2)
- 查询结果的动态排序(1)
- 数据库查询结果的动态排序(6)
- 数据库查询结果的动态排序(4)
- 数据库查询结果的动态排序(3)
- 数据库查询结果的动态排序(1)
- 数据库查询结果的动态排序(2)
- Hibernate如何完成查询结果的排序
- android 联系人查询结果的排序问题
- android 联系人查询结果的排序问题
- mysql对查询的结果集排序
- 查询结果按自己的规则排序
- 亚洲货币绞杀战
- SQLserver中用convertSQLserver中用convert函数转换日期格式函数转换日期格式
- SQL语句参考及记录集对象详解
- 网络编程
- 钢铁企业如何分步实施信息化
- 查询结果的动态排序(5)
- 计算机专业毕业了,还要不要参加培训班?
- 查询结果的动态排序(4)
- 解决瑞星安装时通用库错误问题
- 提升JSP应用程序的七个实用方法
- 查询结果的动态排序(3)
- 查询结果的动态排序(2)
- 微软面试
- 查询结果的动态排序(1)