sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta recursiva para lista de materiales

Creo que tu lógica estaba básicamente bien. Aquí hay dos mejoras. Primero, el nivel es incremental para que pueda ver lo que sucede con la recursividad. En segundo lugar, utiliza una combinación explícita:

With BMStudy as (
      select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
      from BM010115 bm
      where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
      UNION ALL
      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BMStudy ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like ''
     )
select * from BMStudy;

Sospecho que su problema es la condición where bb.BOMNAME_I like '' . ¿Es posible que este valor sea realmente NULL? en lugar de en blanco?

También debe verificar qué hace esta consulta no recursiva de un nivel hacia abajo:

      select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
      from BM010115 ba join
           BM010115 bb
           on ba.cpn_i = bb.ppn_i
      where bb.BOMNAME_I like '' and
            (ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')