Las constantes de tabla WITH nos permiten preparar resultados en forma de vista que luego se pueden usar en la sentencia inmediatamente posterior. Se pueden definir varias vistas en la misma cláusula WITH, y pueden ser recursivas. Esta cláusula se usa mucho en las funciones in-line. 

Editar el trigger Anticipos_Cli_DTrig para ver un ejemplo de WITH y como sustituye a un cursor.

 

Ejemplo de WITH recursivo para devolver el árbol de familias:

 

;WITH FAM AS                          

(               

-- semilla  

SELECT IdFamilia as IdFam FROM Articulos_Familias WHERE IdFamilia='prueba1'

UNION ALL                               

-- recursion

SELECT AF.IdFamilia FROM FAMINNER JOIN Articulos_Familias AF ON F.IdFam=AF.IdFamiliaPadre             

)                              

SELECT * FROM FAM 

 

Ejemplo de WITH recursivo para devolver el árbol de sustitución de efectos de una determinada factura:

 

Declare @IdFactura int=197910

Declare @IdEfecto int=1

 

 

;WITH LosEfectos(IdFactura,IdEfecto)                                                                                                                                      

AS (

                -- semilla

SELECT IdFactura,IdEfecto FROM Clientes_Efectos_Hist WHERE IdFacturaPadre=@IdFactura AND IdEfectoPadre=@IdEfecto                                         

                UNION ALL                                               

                -- recursion                              

                SELECT CEH.IdFactura,CEH.IdEfecto                                                          

FROM LosEfectos E INNER JOIN Clientes_Efectos_Hist CEH ON E.IdFactura = CEH.IdFacturaPadre AND E.IdEfecto = CEH.IdEfectoPadre                                                                                                                                                                                                                         

)                                                                                                                                             

SELECT * FROM LosEfectos                                                              

 

<< Artículo anterior                                                                                                                                       Siguiente artículo >>