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 FAM F INNER 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