SQL server 嵌套循环算法

zggm405 2014-04-20 07:10:23
表结构:

表名:bom
zjh lbjth sx1
001 部件
001 002 部件
001 003 部件
001 004 零件
002 005 部件
002 006 零件
002 007 零件
003 008 零件
003 009 零件
005 010 部件
005 011 零件
005 012 零件
010 013 部件
010 014 零件
010 015 零件
以此类推。
想实现算法,依据最顶级图号“001”,自动提取001对应下面多有的对应数据,提取数据插入到另外一张表中。
目前这个算法只能实现2层,麻烦各位大侠帮看下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER PROCEDURE [dbo].[up_getpdm_bom_new]

@stat_zjh varchar(20)

AS
begin

SET NOCOUNT ON

DECLARE @Str_lbjth varchar(20)
DECLARE @Str_lbjmc varchar(20)
DECLARE @Str_zjh varchar(20)
DECLARE @Str_sx1 varchar(20)
DECLARE @str_count int

DECLARE Structure CURSOR
FOR
SELECT lbjth,lbjmc,zjh,sx1 FROM bom where zjh = @stat_zjh

OPEN Structure

FETCH NEXT FROM Structure
INTO @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1

WHILE @@FETCH_STATUS = 0

BEGIN


insert into lbjsxwh(lbjth,lbjmc,zjh,sx1)
SELECT @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1

DECLARE Structure1 CURSOR
FOR
SELECT lbjth,lbjmc,zjh,sx1 FROM bom where zjh = @Str_lbjth

OPEN Structure1

FETCH NEXT FROM Structure1 INTO @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1
IF @@FETCH_STATUS = 0

WHILE @@FETCH_STATUS = 0

BEGIN
print(@Str_lbjth)

insert into lbjsxwh(lbjth,lbjmc,zjh,sx1)
SELECT @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1
FETCH NEXT FROM Structure1 INTO @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1

END

CLOSE Structure1

DEALLOCATE Structure1
FETCH NEXT FROM Structure INTO @Str_lbjth , @Str_lbjmc,@Str_zjh , @Str_sx1
END

CLOSE Structure

DEALLOCATE Structure
RETURN
END


COMMIT TRANSACTION
SET NOCOUNT OFF

...全文
358 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaojunyi3721 2014-05-04
  • 打赏
  • 举报
回复
没积分发问题 A表有MODULE_NAME(模块名称)和MODULE_ID列,其中MODULE_ID为空,MODULE_NAME列为一个这样格式可能是:”1、模块列表-产品实现-献血服务-献血核查。“,也可能是“1、产品实现。” B表(模块名称表)有ID和NAME(模块名称)列,NAME列的数据为标准信息,如“产品实现”。 数据就是这样的:A表的模块名称列里的数据包含B表的NAME的数据。 现在想通过将A表关联B表实现将B表的ID更新到A表的MODULE_ID列。 请问如何实现,谢谢。
KeepSayingNo 2014-04-22
  • 打赏
  • 举报
回复
请参考我这篇文章做,如果可以帮助到你,麻烦给个评论哈 http://blog.csdn.net/dotnetstudio/article/details/10109497
hexiaojie 2014-04-22
  • 打赏
  • 举报
回复
...用with函数啊,你不是有个帖子是问这个问题了吗。。。
  • 打赏
  • 举报
回复
这个sql 2005以上的话,用cte递归,很好解决
software_artisan 2014-04-22
  • 打赏
  • 举报
回复
可以这样写:
with
a as (
  select a from table_a
  union all
  select a from table_a b
  join a on a.a = b.ParentId
zggm405 2014-04-20
  • 打赏
  • 举报
回复
通过函数实现,但SQL SERVER 无法嵌套自身函数,主要是定义游标问题

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧