函數自遞歸問題

[复制链接]
查看11 | 回复1 | 2011-11-1 16:21:15 | 显示全部楼层 |阅读模式
-----測試數據
Create Table PDM_MatGroup(MatGroup varchar(16))
Create Table PDM_MatGroupItems(MatGroup varchar(16),SerialNum int,MatCode varchar(16))
Insert PDM_MatGroup
Select 'T05E8482B1000001'
Insert PDM_MPDM_MatGroupItemstGroup
Select 'T05E8482B1000001',1,'774SD1000101'
Union
Select 'T05E8482B1000001',2,'T05A8482B1000001'
Union
Select 'T05A8482B1000001',1,'G3113114103S1'
-----測試數據
-----函數
Create Function PDM_MatLevel(@MatCode cPartNum,@LevelNo int,@LevelCount int )
Returns @T Table(PartNum varchar(16),LevelNo int,MatCode varchar(16),IsLevel int)
AS
Begin

--Write FirstLevel

IF @LevelNo = 0

Begin

Insert @T(PartNum,LevelNo,MatCode,IsLevel)

Select @MatCode,0,@MatCode,0

From PDM_MatGroup(nolock)

Where MatGroup = @MatCode

End

Declare @LevelNext int

Select @LevelNext=@LevelNo+1

IF @LevelNext > @LevelCount

Begin

Return

End

--Level is true

IF exists(Select t2.MatCode

From @T t1,

PDM_MatGroupItems t2(nolock)

Where t1.LevelNo= @LevelNo

and t1.MatCode=t2.MatGroup)

Begin



--Set LevelTree

Update t1

Set t1.IsLevel = 1

From @T t1,PDM_MatGroupItems t2(nolock)

Where t1.LevelNo = @LevelNo

and t1.MatCode = t2.MatGroup

--Write NextLevel

Insert @T(PartNum,LevelNo,MatCode,IsLevel)

Select @MatCode,@LevelNext,t2.MatCode,0

From @T t1,

PDM_MatGroupItems t2(nolock)

Where t1.LevelNo = @LevelNo

and t1.MatCode = t2.MatGroup

IF @@NESTLEVEL <32

Insert @T Select * From dbo.PDM_MatLevel(@MatCode,@LevelNext,@LevelCount)

End

Return


End
-----函數
----查詢
Select * From PDM_MatLevel('T05E8482B1000001',0,255)
結果只跑了1層,第2層沒跑,谁能幫忙看下哪裡有問題,謝謝
回复

使用道具 举报

千问 | 2011-11-1 16:21:15 | 显示全部楼层
--SQL Server 2005 递归
WITH cteQuery(PartNum,LevelNo,MatCode,IsLevel) AS

(SELECT MatGroup AS PartNum,SerialNum AS LevelNo,MatCode,0 AS IsLevel
FROM PDM_MatGroupItems
WHERE MatGroup='T05E8482B1000001'
UNION ALL
SELECT pm.MatGroup AS PartNum,SerialNum AS LevelNo,pm.MatCode,IsLevel+1
FROM PDM_MatGroupItems pm INNER JOIN cteQuery

ON pm.matGroup=cteQuery.matCode)
SELECT * FROM cteQuery
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行