日期:2011-05-02 15:21:00 来源:本站整理
数据库查询后果的动态排序(5)[MSSQL防范]
本文“数据库查询后果的动态排序(5)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
5、用户定义函数
假如你利用的是sql server 2000,想要编写一个用户定义的函数(UDF),这个用户定义函数承受列的名字或编号为参数、返回排序的后果集,Listing 10显示了大大都程序员当作第一挑选的办法.
【Listing 10:列名字作为参数,利用UDF】
CREATE FUNCTION ufn_GetSortedShippers
(
@ColName AS sysname
)
RETURNS TABLE
AS
RETURN
SELECT *
FROM Shippers
ORDER BY
CASE @ColName
WHEN 'ShipperID' THEN CASE SIGN(ShipperID)
WHEN -1 THEN '-'
WHEN 0 THEN '+'
WHEN 1 THEN '+'
ELSE NULL
END +
RIGHT(REPLICATE('0', 10) +
CAST(ABS(ShipperID) AS
varchar(10)), 10)
WHEN 'CompanyName' THEN CompanyName
WHEN 'Phone' THEN Phone
ELSE NULL
END
但是,SQL Server不承受这个函数,它将返回以下错误信息:
Server: Msg 1033, Level 15, State 1, Procedure ufn_GetSortedShippers,
Line 24
The ORDER BY clause is invalid in views, inline functions, and
subqueries, unless TOP is also specified.
注意错误信息中的"unless".SQL Server 2000不答应在视图、嵌入式UDF、子查询中呈现ORDER BY子句,因为它们都应当返回一个表,表不能指定行的次序.但是,假如利用了TOP关键词,ORDER BY子句将帮忙肯定查询所返回的行.因此,假如指定了TOP,你还可以同时指定ORDER BY.由于在带有TOP的UDF中答应利用ORDER BY子句,你可以利用一个本领:把"SELECT *"替换成"SELECT TOP 100 PERCENT *".这样,你就可以够成功地构造出一个承受列名字或编号为参数、返回排序后果的函数.
新构造的函数可以按照以下方法调用:
SELECT * FROM ufn_GetSortedShippers('ShipperID')
目前,你已经理解了几种用参数肯定查询输出中记录次序的办法.在编写那些答应用户指定查询后果排序尺度的列的利用程序时,你可以利用本文介绍的各种技术,用列名字或编号作为参数,构造出利用CASE表达式和动态履行本领的各种筹划. 以上是“数据库查询后果的动态排序(5)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论