Caso: Se tiene una consulta SQL que se genera dinamicamente, se quiere volcar el conjunto de resultados en una tabla temporal. Se tuvo que realizar lo siguiente:
ALTER PROCEDURE [dbo].[SPS_GeneraRptPedidoDetalle]
@docFechaInicio [date],
@docFechaFin [date],
@codCliente [int],
@sucursal [char](4),
@ordenCompra [char](15),
@fAprobInicio [date],
@fAprobFin [date],
@vendedor [int],
@item [char](15),
@nroDoc [char](14),
@linea [char](6),
@familia [char](6),
@subfamilia [char](6)
AS
BEGIN
DECLARE @cadenaTotal [nvarchar](max)
DECLARE @cadenaSql [varchar](MAX)
DECLARE @cadenaWhere [nvarchar](MAX)
DECLARE @cadenaOrderBy [varchar](200)
DECLARE @cadenaGroupBy [varchar](MAX)
SET @cadenaTotal=N''
SET @cadenaWhere=N''
SET @cadenaSql='SELECT
t2.ClienteReferencia,
t2.ClienteNumero,
t2.ClienteNombre,
t1.NumeroDocumento,
t1.TipoDetalle,
t1.Linea as LineaDoc,
[t10].[DescripcionLocal] as Marca,
t1.ItemCodigo,
t1.Descripcion,
t1.UnidadCodigo,
t1.CantidadPedida,
t1.Monto,
t1.DocumentoRelacNumeroDocumento,
t1.DocumentoRelacLinea,
t1.ExportacionMarcaPaquete,
t2.MonedaDocumento,
[t9].[DescripcionCorta] AS GlosaMoneda,
t1.Estado,
t2.Vendedor,
[t8].[NombreCompleto] AS AsesorComercial,
t1.IGVExoneradoFlag,
t2.Criteria,
t2.FechaDocumento,
t2.FechaAprobacion,
t1.UnidadCodigoDoble,
t1.CantidadPedidaDoble,
t2.Comentarios,
t1.DocumentoRelacTipoDocumento,
t1.TipoDocumento,
t1.Lote,
t1.CantidadEntregada,
t1.PrecioUnitario,
t1.AlmacenCodigo,
t1.Condicion,
t1.PorcentajeDescuento01,
t1.PorcentajeDescuento02,
t1.PorcentajeDescuento03,
t1.TransferenciaGratuitaFlag,
t1.PrecioUnitarioGratuito,
t1.PrecioUnitarioOriginal,
t1.MontoFinal,
t1.PrecioUnitarioFinal,
t2.NumeroInterno,
t1.NumeroSerie,
t2.CentroCosto,
t3.Linea as LineaItem,
t3.Familia,
t3.SubFamilia,
t3.NumeroDeParte,
t3.ItemProcedencia,
t1.ExportacionFechaProgramacion,
t1.exportacioncomentarios,
t2.ClienteRUC,
t2.RequisicionNumero,
t4.StockActual AS StockActual,
t4.StockActual - ISNULL(t4.StockComprometido, 0) AS StockDisponible,
t4.StockComprometido AS StockComprometido,
t5.StockProceso,
t6.FechaPrometida,
t7.ClasificacionRotacion,
[t2].[ClienteReferencia] AS NroOC,
(sum(t1.[CantidadPedida] - [t1].[CantidadEntregada])*t1.[PrecioUnitario]) AS Valorizado,
(sum(t1.[CantidadPedida] - [t1].[CantidadEntregada])*t1.[PrecioUnitario]*(CASE t2.[MonedaDocumento] WHEN ' + char(39) + 'LO' + char(39) + ' THEN (1/[t2].[TipodeCambio]) ELSE 1 END )) AS ValorizadoCambio
INTO #tmpTemporal
FROM spring.[dbo].CO_DocumentoDetalle t1
INNER JOIN spring.[dbo].CO_Documento t2 ON (t2.CompaniaSocio = t1.CompaniaSocio)
AND (t2.TipoDocumento = t1.TipoDocumento)
AND (t2.NumeroDocumento = t1.NumeroDocumento)
LEFT OUTER JOIN spring.[dbo].WH_ItemMast t3 ON t1.ItemCodigo = t3.Item
LEFT OUTER JOIN spring.[dbo].VW_WH_ItemAlmacenStock t4 ON t1.ItemCodigo = t4.Item
AND t1.AlmacenCodigo = t4.AlmacenCodigo
LEFT OUTER JOIN spring.[dbo].VW_WH_ItemComprasEnProceso t5 ON t5.Item = t1.ItemCodigo
AND t5.Companiasocio = t1.Companiasocio
LEFT OUTER JOIN spring.[dbo].VW_WH_ItemComprasEnProcesoFecha t6 ON t6.Item = t1.ItemCodigo
AND t6.Companiasocio = t1.Companiasocio
LEFT OUTER JOIN spring.[dbo].WH_ItemAlmacen t7 ON t7.AlmacenCodigo = t2.AlmacenCodigo
AND t7.Item = t1.ItemCodigo
AND t7.Condicion = ' + char(39) + '0' + char(39) + '
LEFT OUTER JOIN [Spring].[dbo].[PersonaMast] t8 ON t8.[Persona]=[t2].[Vendedor]
LEFT OUTER JOIN [spring].[dbo].[MonedaMast] t9 ON t9.[MonedaCodigo]=[t2].[MonedaDocumento]
LEFT OUTER JOIN [Spring].[dbo].[WH_Marcas] t10 ON t10.[MarcaCodigo]=[t3].[MarcaCodigo]
WHERE (t1.TipoDocumento = ' + char(39) + 'PE' + char(39) + ')
AND (t1.Estado = ' + char(39) + 'PR' + char(39) + ')
AND t1.CantidadPedida > t1.CantidadEntregada
AND t2.Estado = ' + char(39) + 'AP' + char(39) + '
AND (t2.CompaniaSocio = ' + char(39) + '01000000' + char(39) + ')
AND (t2.FormaFacturacion <> ' + char(39) + 'GF' + char(39) + ')
AND (t2.TipoVenta <> ' + char(39) + 'SEP' + char(39) + ')' +
' AND (CAST(t2.FechaDocumento AS date) BETWEEN @docFechaInicio AND @docFechaFin)'
IF @codCliente<> 0 BEGIN
SET @cadenaWhere= @cadenaWhere + N' AND [t2].[ClienteNumero]=@codCliente'
END
IF @sucursal<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t2].[Sucursal]=@sucursal'
END
IF @ordenCompra<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t2].[ClienteReferencia]=@ordenCompra'
END
IF YEAR(@fAprobInicio)<>1900 AND YEAR(@fAprobFin)<>1900 BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND CAST(ISNULL([t2].[FechaAprobacion],' + char(39) + '19000101' + char(39) + ') AS date) BETWEEN @fAprobInicio AND @fAprobFin'
END
IF @vendedor<>0 BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t2].[Vendedor]=@vendedor'
END
IF @item<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t1].[ItemCodigo]=@item'
END
IF @nroDoc<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t1].[NumeroDocumento]=@nroDoc'
END
IF @linea<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t3].[Linea]@linea'
END
IF @familia<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t3].[Familia]=@familia'
END
IF @subfamilia<>'0' BEGIN
SET @cadenaWhere=@cadenaWhere + N' AND [t3].[SubFamilia]=@subfamilia'
END
SET @cadenaGroupBy=N' GROUP BY
t1.NumeroDocumento,
t1.TipoDetalle,
t1.Linea,
[t10].[DescripcionLocal],
t1.ItemCodigo,
t1.Descripcion,
t1.UnidadCodigo,
t1.CantidadPedida,
t1.Monto,
t1.DocumentoRelacNumeroDocumento,
t1.DocumentoRelacLinea,
t1.ExportacionMarcaPaquete,
t2.ClienteNumero,
t2.ClienteNombre,
t2.MonedaDocumento,
[t9].[DescripcionCorta],
t1.Estado,
t2.Vendedor,
[t8].[NombreCompleto],
t1.IGVExoneradoFlag,
t2.Criteria,
t2.FechaDocumento,
t2.FechaAprobacion,
t1.UnidadCodigoDoble,
t1.CantidadPedidaDoble,
t2.Comentarios,
t1.DocumentoRelacTipoDocumento,
t1.TipoDocumento,
t1.Lote,
t1.CantidadEntregada,
t1.PrecioUnitario,
t1.AlmacenCodigo,
t1.Condicion,
t1.PorcentajeDescuento01,
t1.PorcentajeDescuento02,
t1.PorcentajeDescuento03,
t1.TransferenciaGratuitaFlag,
t1.PrecioUnitarioGratuito,
t1.PrecioUnitarioOriginal,
t1.MontoFinal,
t1.PrecioUnitarioFinal,
t2.NumeroInterno,
t2.ClienteReferencia,
t1.NumeroSerie,
t2.CentroCosto,
t3.Linea,
t3.Familia,
t3.SubFamilia,
t3.NumeroDeParte,
t3.ItemProcedencia,
t1.ExportacionFechaProgramacion,
t1.exportacioncomentarios,
t2.ClienteRUC,
t2.RequisicionNumero,
t4.StockActual,
t4.StockComprometido,
t5.StockProceso,
t6.FechaPrometida,
t7.ClasificacionRotacion,
[t2].[ClienteReferencia],
t2.[TipodeCambio]'
SET @cadenaOrderBy=' ORDER BY t2.FechaDocumento ASC
, [t2].[ClienteNombre] ASC
, t1.NumeroDocumento ASC
, t1.Linea ASC
, t2.MonedaDocumento ASC;'
DECLARE @sqlTemporal [varchar](500)
SET @sqlTemporal='SELECT *, (SELECT SUM(t2.Monto) FROM #tmpTemporal t2 WHERE ISNULL(t2.ClienteReferencia,' + char(39) + char(39) + ')=ISNULL(t1.ClienteReferencia,' + char(39) + char(39) + ') AND t2.ClienteNumero=t1.ClienteNumero) AS MontoTotal
FROM #tmpTemporal t1;
DROP TABLE #tmpTemporal;'
SET @cadenaTotal=@cadenaSql+ @cadenaWhere + @cadenaGroupBy + @cadenaOrderBy + @sqlTemporal
EXEC sp_executesql @cadenaTotal, N'@docFechaInicio [date], @docFechaFin [date], @codCliente [int], @sucursal [char](4)
, @ordenCompra [char](15), @fAprobInicio [date], @fAprobFin [date], @vendedor [int], @item [char](15), @nroDoc [char](14)
, @linea [char](6), @familia [char](6), @subfamilia [char](6)'
, @docFechaInicio, @docFechaFin, @codCliente, @sucursal
, @ordenCompra, @fAprobInicio, @fAprobFin, @vendedor, @item, @nroDoc
, @linea, @familia, @subfamilia
END
GO