递归速度较慢,建议建立索引,如下:

Create index 索引名【表名_字段名】on 表名(字段1,字段2...)

Drop index 表名.索引名

 

--根据子节点,得到父节点
CREATE PROCEDURE ProcGetRootID
    @PatentID bigInt
AS
DECLARE @ID bigInt
BEGIN
    CREATE TABLE #TEMP(PatentID bigInt,ID bigInt)
    WHILE 1 = 1
    BEGIN
        SELECT @ID = ID FROM Table WHERE @PatentID = PatentID
           IF @ID = 0 --结束条件,根据自己的业务写
           BEGIN 
               INSERT INTO #TEMP VALUES (@PatentID,@ID)
               BREAK;
           END
        SET  @PatentID = @ID
    END
    SELECT PatentID,ID FROM #TEMP
END

 

 

 


/***
获取父节点下的所有子节点
父ID:@FormCode
子ID:OrigOrder
注意:这个数据量大的时候更慢,建立索引为上策

根据根订单Id获得所有有售后服务的订单id,即此订单有受理单
*/
ALTER  PROCEDURE [dbo].[ProcGetAllFormCode]
 @FormCode bigInt
AS
BEGIN

 With RootNodeCTE(FormCode,OrigOrder)   
 As   
 (   
 Select FormCode,OrigOrder From OrderForm Where OrigOrder In (@FormCode)   
 Union All   
 Select OrderForm.FormCode,OrderForm.OrigOrder From RootNodeCTE   
 Inner Join OrderForm  
 On RootNodeCTE.FormCode = OrderForm.OrigOrder   
 )
 --把根节点包含进来
 SELECT FormCode,OrigOrder  FROM OrderForm WHERE FormCode=@FormCode
 UNION ALL
 Select * From RootNodeCTE 
END

 

 调用方法

ProcGetAllFormCode 参数

如下 ProcGetAllFormCode 112587869

posted on 2011-03-22 11:56  秦岭过客  阅读(493)  评论(0编辑  收藏  举报