Funciones tipo tabla:

CREATE FUNCTION [dbo].[Fun_DameDatosFactura] (@IdFactura T_Id_Factura=NULL)
RETURNS @RET TABLE (Anyo int, Mes int,IdFactura int, IdArticulo varchar(50),Cant decimal (38,10),PVP Float, Precio_Total Float)
-- funcion para devolver datos de factura
BEGIN
Declare @Tab_Facts TABLE (IdFactura int)
-- rellenar @Tab_Facts
IF @IdFactura IS NOT NULL
INSERT INTO @Tab_Facts VALUES (@IdFactura)
ELSE
INSERT INTO @Tab_Facts (IdFactura)
SELECT IdFactura FROM Facturas_Cli_Cab
-- rellenar tabla retorno
INSERT INTO @RET (Anyo,Mes,IdFactura,IdArticulo,Cantidad,PVP,Precio_Total)
SELECT YEAR(F.FechaFact),
MONTH(F.FechaFact),
F.IdFactura,
l.IdArticulo,
l.Cantidad,
l.Precio_EURO * (1-L.Descuento/100.0) * (1-F.Descuento/100.0) * (1-F.DescuentoPP/100.0) PVP,
L.Cantidad * L.Precio_EURO * (1-L.Descuento/100.0) * (1-F.Descuento/100.0) * (1-F.DescuentoPP/100.0) Precio_Total
FROM @Tab_Facts T INNER JOIN Pedidos_Cli_Lineas L ON T.IdFactura=L.IdFactura
INNER JOIN Facturas_Cli_Cab F WITH (NOLOCK) ON L.IdFactura=F.IdFactura
-- retorno<
RETURN
END
-- llamada
SELECT * FROM dbo.[Fun_DameDatosFactura](default)
-- llamada
SELECT * FROM Facturas_cli_cab F CROSS APPLY dbo.[Fun_DameDatosFactura](F.IdFactura) lFun