Duda con Procedure en SQL Server

Iniciado por raintrooper, 28 Octubre 2016, 05:20 AM

0 Miembros y 1 Visitante están viendo este tema.

raintrooper

Buenas noches, gracias por su acostumbrada ayuda. Tengo un procedure en Sql Server el cual seria el siguiente:

USE []
GO
/****** Object:  StoredProcedure [dbo].[stp_Reporte_Facturado_BLs]    Script Date: 10/27/2016 9:13:22 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================

-- =============================================
ALTER PROCEDURE [dbo].[stp_Reporte_Facturado_BLs]
   --@FechaDesde varchar(max), @FechaHasta varchar(max), @CodManifiesto int
   @CodManifiesto VARCHAR(max), @CodBl VARCHAR(max)
   --@EstadoFactura varchar(max)
   
AS
BEGIN
   DECLARE @cols AS varchar(MAX),@query AS varchar(MAX),
   @EstadoFactura as varchar(max);
   SET @EstadoFactura = 'V';

   SET @cols = STUFF(
                  (
                     SELECT DISTINCT '],[' + CAST(CodigoTipoCargoLocal AS varchar(3))
                     FROM Ct_C_CargosLocalesTipos
                     FOR XML PATH('')
                  )
                  ,1,2,''
               )+']'


   SET @query = '
   SELECT CodManifiesto, CodBL, NombreTransporte NumViaje, NumBL, IDEquipo ,
      '+@cols+' FROM (
      SELECT b.CodManifiesto, b.CodBL, NombreTransporte, NumViaje, NumBL , IDEquipo, 
      NumPDF, f.Total, TipoCargoLocal
      FROM M_BLs b
      INNER JOIN M_Manifiestos man on b.CodManifiesto = man.CodManifiesto
      INNER JOIN M_CargosLocales mc on b.CodBL = mc.CodBL
      LEFT JOIN V_EquiposBL veq on mc.CodEquipo = veq.CodEquipo
      LEFT JOIN Ct_FacturasDetalles fd on mc.CodCargoLocal = fd.CodCargoLocal
      LEFT JOIN Ct_Facturas f on f.CodFactura = fd.CodFactura
      LEFT JOIN Ct_RecibosDetalles rd on fd.CodDetalleFactura = rd.CodDetalleFactura
      LEFT JOIN Ct_Recibos r on r.CodRecibo = rd.CodRecibo
      WHERE b.codmanifiesto = '+@CodManifiesto+' AND NumBL = '''+@CodBl+'''

   ) AS TP

   PIVOT
      (
         MAX(NumPDF)
         for TipoCargoLocal IN ('+@cols+')
      )ptable
'
   
   --GROUP BY NumBL, '+@cols+',NombreTransporte, NumViaje'
   execute(@query)
END


En este procedure a como esta ahorita, a la fuerza le debo enviar los datos de @codmanifiesto y @codbl. El problema viene en que ese @codbl hay casos en los que si llegara y casos en que no. Para esto necesitaria un if o un case, pero no tengo idea de como utilizarlo, para que siempre funcione con el @codmanifiesto y en algunos casos con @codbl.

Alguien podria ayudarme con esto por favor?



Gracias.

Shell Root

Por ejemplo,
Código (sql) [Seleccionar]
IF( LEN(@dtStart) = 10 AND LEN(@dtEnd) = 10 ) BEGIN
   /* [SNIP] */
END ELSE PRINT 'Debe de ingresar fechas';
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.