sábado, 9 de noviembre de 2013

VARIABLE TABLE SQL SERVER 2008

 Buenas en esta ocasion veremos el uso de la variable tipo TABLE , conbinandose con otras sentencias dentro del Transact SQL.


/*

Autor                 :     Martin Cox R.
  */
CREATE PROC [FINANZAS].[PA_ESTADOCUENTA_CLIENTES] --1, 24,1 , '21/01/2013','21/08/2013'     
@IDCompania numeric ,      
@IDCliente numeric  ,      
@IDMoneda numeric  ,     
@FechaInicio datetime ,     
 @FechaFinal datetime      
AS     
declare @FechaRegistro DateTime        
declare @NumeroComprobante varchar(100)       
declare @TipoDocumento varchar(100)       
declare @Total decimal(18,4)       
declare @Flag  char(1)       
declare @Contador numeric = 1       
 declare @Saldo decimal(18,4)= 0       
declare @RazonSocial varchar(200)=''     
declare @Ruc varchar(15)=''     
     
      
       
DECLARE @tempEstadoCuentaFinal table(       
FechaRegistro DateTime ,       
NumeroComprobante varchar(100),       
 TipoDocumento varchar(100),       
Debito decimal(18,4),        
Credito decimal(18,4),        
Saldo decimal(18,4)  ,      
RazonSocial varchar(200) ,      
Ruc varchar(15)        
)     
     
select        
 FechaEmision as FechaRegistro ,NumeroDocumento as NumeroComprobante ,        
 tipDoc_cNombreTipoDocumento as TipoDocumento ,       
Total  , 'H' AS Flag ,  RazonSocial , Ruc     
     
into #tempDoc from MAESTROS.VIEW_DOCUMENTOSCOBRAR_LISTAR     
    where MAESTROS.VIEW_DOCUMENTOSCOBRAR_LISTAR.FormaPago = 2     
      and IDPersona =@IDCliente and IDMonedaDocumento = @IDMoneda     
Union All     
SELECT     FINANZAS.COMPROBANTECAJA.FechaRegistro, FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.NumeroComprobante,      
                      FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.TipoDocumento, FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.ImportePagar AS Total,      
                       'D' AS Flag , MAESTROS.MAE_CLIENTES.cli_cNombreCompletoCliente as RazonSocial ,MAESTROS.MAE_CLIENTES.cli_cRucCliente as Ruc     
FROM FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR      
INNER JOIN FINANZAS.COMPROBANTEENTRADACAJA ON FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.IDCompania = FINANZAS.COMPROBANTEENTRADACAJA.IDCompania AND  FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.IDTipoDocumento = FINANZAS.COMPROBANTEENTRADACAJA.IDTipoDocumento AND      
                       FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.IDSede = FINANZAS.COMPROBANTEENTRADACAJA.IDSede AND      
                      FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.IDCentroFinanciero = FINANZAS.COMPROBANTEENTRADACAJA.IDCentroFinanciero AND      
                       FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.NumeroComprobanteCaja = FINANZAS.COMPROBANTEENTRADACAJA.NumeroComprobante AND      
                      FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.NumeroSerieCaja = FINANZAS.COMPROBANTEENTRADACAJA.NumeroSerie      
 INNER JOIN              FINANZAS.COMPROBANTECAJA ON FINANZAS.COMPROBANTEENTRADACAJA.IDCompania = FINANZAS.COMPROBANTECAJA.IDCompania AND      
                      FINANZAS.COMPROBANTEENTRADACAJA.IDTipoDocumento = FINANZAS.COMPROBANTECAJA.IDTipoDocumento AND      
                       FINANZAS.COMPROBANTEENTRADACAJA.IDSede = FINANZAS.COMPROBANTECAJA.IDSede AND      
                      FINANZAS.COMPROBANTEENTRADACAJA.IDCentroFinanciero = FINANZAS.COMPROBANTECAJA.IDCentroFinanciero AND      
                       FINANZAS.COMPROBANTEENTRADACAJA.NumeroComprobante = FINANZAS.COMPROBANTECAJA.NumeroComprobante AND      
                      FINANZAS.COMPROBANTEENTRADACAJA.NumeroSerie = FINANZAS.COMPROBANTECAJA.NumeroSerie     
 inner join MAESTROS.MAE_CLIENTES on FINANZAS.COMPROBANTEENTRADACAJA.IDCliente =MAESTROS.MAE_CLIENTES.cli_nCodigoCliente     
                           
                           
WHERE  (FINANZAS.COMPROBANTECAJADOCUMENTOCOBRARPAGAR.FormaPago = 'CREDITO') and (FINANZAS.COMPROBANTEENTRADACAJA.IDCliente = @IDCliente)     
 and FINANZAS.COMPROBANTECAJA.IDMoneda = @IDMoneda    and RTRIM( FINANZAS.COMPROBANTECAJA.EstadoEntrega) != 'ANULADO' 
        
DECLARE CursorEstadoCuenta CURSOR     
FOR       
select *  from  #tempDoc     
--where FechaRegistro between  CONVERT(CHAR(10),@FechaInicio,103) and CONVERT(CHAR(10),@FechaFinal  ,103)     
  where CONVERT(CHAR(10),FechaRegistro,103) between  CONVERT(CHAR(10),@FechaInicio,103) and CONVERT(CHAR(10),@FechaFinal  ,103)     
     
       
OPEN CursorEstadoCuenta       
FETCH CursorEstadoCuenta        
        
INTO  @FechaRegistro ,@NumeroComprobante ,@TipoDocumento ,@Total ,@Flag ,@RazonSocial ,@Ruc     
       
WHILE (@@FETCH_STATUS = 0)       
       
 begin       
   if(@Flag = 'D')       
     begin       
      set @Saldo  =  @Saldo  -  @Total - 0 ;         
       insert into @tempEstadoCuentaFinal values (@FechaRegistro ,@NumeroComprobante ,       
      @TipoDocumento ,@Total ,0,@Saldo,rtrim(@RazonSocial) ,@Ruc )       
             
     end       
          
  else if(@Flag = 'H')       
       begin       
      set @Saldo  =  @Saldo  +  @Total - 0 ;        
       insert into @tempEstadoCuentaFinal values (@FechaRegistro ,@NumeroComprobante ,       
       @TipoDocumento ,0 ,@Total,@Saldo ,RTRIM( @RazonSocial),@Ruc)       
               
      end         
   FETCH CursorEstadoCuenta INTO  @FechaRegistro ,@NumeroComprobante ,@TipoDocumento ,@Total ,@Flag    ,@RazonSocial     
                                ,@Ruc     
   set  @Contador =@Contador +1;       
           
 END -- end loop while       
       
CLOSE CursorEstadoCuenta       
DEALLOCATE CursorEstadoCuenta       
       
select * from  @tempEstadoCuentaFinal       
drop table #tempDoc   
   

1 comentario: