当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:21:00  来源:本站整理

UDF在层次型数据处理中的妙用之四[MSSQL防范]

赞助商链接



  本文“UDF在层次型数据处理中的妙用之四[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

UDF在层次型数据处理中的妙用

4、查询管理链


  至此为止,前面的全部例子都是用只返回一个值的数值型用户定义函数(UDF).目前,我们来看看若何利用返回表的UDF.这类函数的返回值是一个记录集或表(即,可用于FROM子句).比方,在处理层次构造的数据时,一个常见的需求是返回从指定管理员开始的整棵子树.


LISTING 6:得到整棵子树

CREATE FUNCTION ufn_GetSubtree
(
@mgrid AS int
)
RETURNS @tree table
(
empid int NOT NULL,
mgrid int NULL,
empname varchar(25) NOT NULL,
salary money NOT NULL,
lvl int NOT NULL,
path varchar(900) NOT NULL
)
AS

BEGIN

DECLARE @lvl AS int, @path AS varchar(900)
SELECT @lvl = 0, @path = '.'

INSERT INTO @tree
SELECT empid, mgrid, empname, salary,
@lvl, '.' + CAST(empid AS varchar(10)) + '.'
FROM Employees
WHERE empid = @mgrid

WHILE @@ROWCOUNT > 0
BEGIN
SET @lvl = @lvl + 1

INSERT INTO @tree
SELECT E.empid, E.mgrid, E.empname, E.salary,
@lvl, T.path + CAST(E.empid AS varchar(10)) + '.'
FROM Employees AS E JOIN @tree AS T
ON E.mgrid = T.empid AND T.lvl = @lvl - 1
END

RETURN

END


  Listing 6显示了成立ufn_GetSubtree函数的脚本.注意返回的表与本来的Employees表有着相同的构造,但增添了两个列:lvl和path.lvl列保存子树中从0开始计算的层次值,path列保存".id0.id1...idn"格局的雇员管理途径.这个字符串包含从子树中最顶层的雇员开始、到当前的雇员为止的全部雇员ID.途径中全部雇员ID的前面和背面都是句点标记.

  path列答应对本例中dbo.ufn_GetSubtree函数返回的子树的行举行得当的排序.关于特定的雇员来说,由于其全部部属的path值都以他的管理员的path值为前缀,排序中这些值可以精确地呈目前它们的管理员之后.函数先把属于管理员的行插入@tree表变量(属于管理员的行在函数参数中指定).接下来,函数开始一个循环,只要前一次插入操作有后果,迭代就一向举行.循环中的代码把前一次插入操作的直接部属追加到@tree表变量.上次插入的雇员的级别可以通过在@lvl变量中跟踪雇员在子树中的当前级别得到. 绿色c hinaip ower. comCXdiE


  目前我们可以测试一下ufn_GetSubtree函数.要得到Andrew(empid是2)以及他的全部部属(包含各个级别)的具体信息,查询号令以下:


SELECT * FROM ufn_GetSubtree(2)
ORDER BY path


  要得到Employees表中全部雇员的层次图,查询号令以下:


SELECT REPLICATE (' | ', lvl) + empname AS employee
FROM ufn_GetSubtree(1)
ORDER BY path


绿色c hinaip ower. comCXdiE

绿色c hinaip ower. comCXdiE



  图一显示了上述查询号令的后果.绿色c hinaip ower. comCXdiE

  以上是“UDF在层次型数据处理中的妙用之四[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • UDF在层次型数据处理中的妙用之一
  • UDF在层次型数据处理中的妙用之二
  • UDF在层次型数据处理中的妙用之三
  • UDF在层次型数据处理中的妙用之四
  • UDF在层次型数据处理中的妙用之五
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .