读书人

CTE递归游标使用中的有关问题

发布时间: 2012-05-22 18:18:54 作者: rapoo

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

读书人网 >SQL Server

热点推荐