网页教学网
 当前位置: 网页教学网 >> 网络编程 >> 数据库编程技术 >> 存储过程的递归中使用游标的冲突问题解决方法
[ HTML ] [ FW ] [ DW ] [ FP ] [ JS ] [ XML ] [ CSS ] [ 图象 ] [ FLASH ] [ .NET ] [ ASP ] [ JSP ] [ PHP ] [ 数据 ] [ 系统 ] [ 安全 ] [ 素材 ] [ 建站 ] [ 主机 ] [ 入门 ] [ 技巧 ]

存储过程的递归中使用游标的冲突问题解决方法

http://www.webjx.com  更新日期:2007-10-06 00:46  出处:网页教学网  作者:徐昌煜

昨天在学习存储过程的时候,由于使用了递归,出现了游标冲突的问题。经过今天一天的努力,终于解决了。现在将程序贴在这里,供大家参考。

DesignBOMDetail表结构如下图:

存储过程的递归中使用游标的冲突问题解决方法

-- =============================================
-- Author:    徐昌煜
-- Create date:   2006-9-16
-- Description:  物料非法递归检查,调用了P_USE_ISSUBPARTRECURSION_XU
-- =============================================
ALTER PROCEDURE dbo.P_ISSUBPARTRECURSION_XU
@MAINPARTID VARCHAR(20)='',@SUBPARTID VARCHAR(20)='',@ISRECURSION BIT OUTPUT
AS
BEGIN
 DECLARE @SUBPARTID_TEMP VARCHAR(20),@RECORDNUM INT,@ID INT
 IF @MAINPARTID=@SUBPARTID
 BEGIN
  SET @ISRECURSION=1
  RETURN 1
 END
 ELSE
 BEGIN
  SELECT * FROM DesignBOMDetail WHERE MainPartID=@SUBPARTID
  SELECT @RECORDNUM=@@ROWCOUNT
  IF @RECORDNUM=0
  BEGIN
   SET @ISRECURSION=0
   RETURN 0
  END
  ELSE 
  BEGIN
   DECLARE @MAIN_CUR CURSOR
   EXECUTE P_USE_ISSUBPARTRECURSION_XU @SUBPARTID,@MAIN_CUR OUTPUT
    FETCH NEXT FROM @MAIN_CUR INTO @ID
    WHILE @@FETCH_STATUS=0
    BEGIN
     SELECT @SUBPARTID_TEMP=SubPartID FROM DesignBOMDetail WHERE ID=@ID
     IF @SUBPARTID_TEMP=@MAINPARTID
     BEGIN
      SET @ISRECURSION=1
      RETURN 1
     END
     ELSE
     BEGIN
      EXECUTE P_ISSUBPARTRECURSION_XU @MAINPARTID,@SUBPARTID_TEMP,@ISRECURSION
      IF @ISRECURSION=1
      BEGIN
       RETURN 1
      END
     END
     FETCH NEXT FROM @MAIN_CUR INTO @ID
    END
  END
   END
   SET @ISRECURSION=0
   RETURN 0
END
-- =============================================
-- Author:    徐昌煜
-- Create date:   2006-9-16
-- Description:   使用P_ISSUBPARTRECURSION_XU时,生成游标。
-- =============================================
ALTER PROCEDURE dbo.P_USE_ISSUBPARTRECURSION_XU
@SUBPARTID VARCHAR(20)='',@TEMP_CURSOR CURSOR VARYING OUTPUT
AS
BEGIN
 SET @TEMP_CURSOR=CURSOR LOCAL FOR SELECT ID FROM DesignBOMDetail WHERE MainPartID=@SUBPARTID
 OPEN @TEMP_CURSOR
END
 /* SET NOCOUNT ON */
 RETURN

关键词:存储过程,游标
推荐给好友】【关闭】【收藏本文
最新五条评论
查看全部评论
评论总数 0
您的评论
用户名: 新注册) 密 码: 匿名:
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为