使用游标迭代sql数据

使用游标迭代sql数据,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,因此,我有一个名为“bom”的SQL表 家长党 儿童党 假设我有一个充满数据的表,例如(未知数量的子级别): 基本上,我想选择“NK-FS-DR-62DR”,它将选择它下面的所有子部分,使其看起来像 | PARENTPARTID | CHILDPARTID | +---------------+--------------+ | NK-FS-DR-62DR | 2001020060 | | 2001020060 | 2002014018 | | 2002014018

因此,我有一个名为“bom”的SQL表

  • 家长党
  • 儿童党
假设我有一个充满数据的表,例如(未知数量的子级别):

基本上,我想选择“NK-FS-DR-62DR”,它将选择它下面的所有子部分,使其看起来像

| PARENTPARTID  |  CHILDPARTID |
+---------------+--------------+
| NK-FS-DR-62DR | 2001020060   |
| 2001020060    | 2002014018   |
| 2002014018    | 120011       |
bom
可以达到未知的深度

所以,我正在寻找某种形式的光标来文字化所有的子级别

我目前有一个游标,但我想不出一种迭代数据的方法

以下是我当前的代码(仅适用于1级):


我尝试在游标中添加游标,但只能得到两个级别的深度,而不是迭代所有数据。

最简单的方法是使用递归CTE:

;with x as (
select parentpartid, childpartid
from bom
where parentpartid = 'NK-FS-DR-62DR'
union all
select bom.parentpartid, bom.childpartid
from bom
inner join x on bom.parentpartid = x.childpartid
)
select * from x

最简单的方法是使用递归CTE:

;with x as (
select parentpartid, childpartid
from bom
where parentpartid = 'NK-FS-DR-62DR'
union all
select bom.parentpartid, bom.childpartid
from bom
inner join x on bom.parentpartid = x.childpartid
)
select * from x

我想您正在寻找的可能的副本是Oracle在SQL Server中的“连接方式”。是吗?我想您正在寻找的可能的副本是Oracle在SQL Server中的“连接方式”。是吗?一般来说,最好避免使用光标。递归解决方案往往也更干净……一般来说,最好避免使用游标。递归解决方案往往也更干净。。。
;with x as (
select parentpartid, childpartid
from bom
where parentpartid = 'NK-FS-DR-62DR'
union all
select bom.parentpartid, bom.childpartid
from bom
inner join x on bom.parentpartid = x.childpartid
)
select * from x