CTE递归,游标使用中的问题。
CTE递归,当单独递归一特定的值, 如:WHERE PARENTID = '4P172183-1C'时可以得出结果。如果结合游标多个值递归时得不到结果。请帮忙看下问题出在什么地方?另外如果要对多笔数据进行递归运算,此方法是否可行,或者应该用什么办法?小弟初学,请赐教!
- SQL code
--DELETE FROM JIEGUODECLARE @ID VARCHARDECLARE Cur_Cour SCROLL CURSOR FOR SELECT DISTINCT dbo.UDT_M_183.UDF_M_1539 FROM dbo.UDT_M_183 INNER JOIN dbo.UDT_S_182 ON dbo.UDT_M_183.RID = dbo.UDT_S_182.RID WHERE dbo.UDT_S_182.UDF_F_1069 = 'SCJH120206001' ORDER BY dbo.UDT_M_183.UDF_M_1539 DESCopen Cur_Cour FETCH NEXT FROM Cur_Cour INTO @ID WHILE @@FETCH_STATUS=0BEGIN--------------------- WITH Relation(ID, RCName, ParentID,LVL,Name_List) AS ( SELECT D.ID, D.RCName , ParentID,1 LVL,CAST(RCName AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 D-- WHERE PARENTID = '4P172183-1C' WHERE PARENTID = @ID UNION ALL SELECT T.ID, T.RCName, T.ParentID ,LVL+1 LVL , CAST((Name_List + '/' + T.RCName) AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 T, Relation P WHERE 1=1 AND P.ID = T.ParentID ) INSERT INTO JIEGUO(ID, RCName, ParentID,LVL,Name_List) SELECT ID, RCName, ParentID,LVL,Name_List FROM Relation------------------------------------------FETCH NEXT FROM Cur_CourENDClose Cur_Cour DEALLOCATE Cur_Cour SELECT *FROM JieGuo
[解决办法]
建议楼主给出你的测试数据和你想实现的结果。大家看看有没有别的方法。
[解决办法]
LZ试试看这样能出你要的结果不?
- SQL code
WITH Relation(ID, RCName, ParentID,LVL,Name_List) AS ( SELECT D.ID, D.RCName , ParentID,1 LVL,CAST(RCName AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 D-- WHERE PARENTID = '4P172183-1C' WHERE PARENTID IN( SELECT DISTINCT dbo.UDT_M_183.UDF_M_1539 FROM dbo.UDT_M_183 INNER JOIN dbo.UDT_S_182 ON dbo.UDT_M_183.RID = dbo.UDT_S_182.RID WHERE dbo.UDT_S_182.UDF_F_1069 = 'SCJH120206001') UNION ALL SELECT T.ID, T.RCName, T.ParentID ,LVL+1 LVL , CAST((Name_List + '/' + T.RCName) AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 T, Relation P WHERE 1=1 AND P.ID = T.ParentID ) SELECT * FROM relation
[解决办法]
还是建议来一个唯一标识列,这样比较好处理点
[解决办法]
- SQL code
WITH Relation(ID, RCName, ParentID,LVL,Name_List) AS ( SELECT D.ID, D.RCName , ParentID,1 LVL,CAST(RCName AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 D-- WHERE PARENTID = '4P172183-1C' WHERE PARENTID IN( SELECT dbo.UDT_M_183.UDF_M_1539 --去掉这处该死的distinct就行。 FROM dbo.UDT_M_183 INNER JOIN dbo.UDT_S_182 ON dbo.UDT_M_183.RID = dbo.UDT_S_182.RID WHERE dbo.UDT_S_182.UDF_F_1069 = 'SCJH120206001') UNION ALL SELECT T.ID, T.RCName, T.ParentID ,LVL+1 LVL , CAST((Name_List + '/' + T.RCName) AS VARCHAR(255)) Name_List FROM dbo.UDT_M_655 T, Relation P WHERE 1=1 AND P.ID = T.ParentID ) SELECT * FROM relation
[解决办法]
因为你的游标后面FETCH NEXT FROM Cur_Cour
错了
少了 into @id