递归速度较慢,建议建立索引,如下:
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