none
Ajuda com chamada de procedure em Query. RRS feed

  • Pergunta

  • Boa tarde

    Galera!

    Estou criando uma Consulta SQL e preciso que a mesma traga uma coluna chamada Prazo de entrega, essa coluna é baseada na coluna DataSaida e PrevEntrega em dias uteis, exemplo:

    DataSaida      PrevEntrega   Prazo Entrega

    25/10/2013   06/11/2013         =  8

    Já possuo um procedure que calcula os dias uteis porém não estou conseguindo fazer a chamada da mesma junto com a consulta, se puderem ajudar agradeço.


    Ex:

    Query

                                            

    Select
            E.EntNome As Cliente,
    ENTIDADE.EntNome As Transportadora,
    C.CidNome As Cidade,
    C.UfSigla As UF,
    NF.NFNum,
    NF.NFValTotNota AsTotalNF,
    Entidade.EntCod,
    CONVERT(VARCHAR, NF.NFDataSaidaEntrada, 103) As DataSaida,
    CONVERT(VARCHAR, PV.PedVendaDataEntrega, 103)As PrevEntrega,
    CONVERT(VARCHAR, NF.USERDataEntMercCli, 103) As DataEntrega

    ---- #Preciso incluir a quantidade de dias uteis aqui #----

    From 
    ENTIDADE E With(NoLock) ,
    CIDADE C With(NoLock),
    NOTA_FISCAL NF With(NoLock),
    ENTIDADE With(NoLock),
    ENT_FONE EF With(NoLock),
    NAT_OPERACAO N (NoLock),
    Ped_Venda PV (NoLock),
    PED_VENDA_NOTA_FISCAL PNF (NoLock)
        Where
    E.CidCod = C.CidCod
    and NF.NfCancelada = 'Não'
    and NF.USERDataEntMercCli is not null
    and E.EntCod = NF.EntCod
    and E.CidCod = C.CidCod
    And     ENTIDADE.Entnat = 'Transportador'
    And     NF.NFTranspEntCod = ENTIDADE.EntCod
    and ENTIDADE.EntCod = EF.EntCod
    And     EF.EntFonePrinc = 'Sim'
    And     (N.NatOpEntraRelVenda = 'Sim' Or (NF.NFNatOpProd In('5.910', '6.910')))
    And    NF.NFNatOpProd = N.NatOpCodEstr
    And     CONVERT(DATETIME, SUBSTRING(CONVERT(VARCHAR, NF.NfDataEmis, 120), 1, 10)) BETWEEN '20131101' AND '20131111' 
    And     PV.PedVendaNum = PNF.PedVendaNum
    AND     PNF.NFNum = NF.NFNum
    AND     PNF.EmpCod = NF.EmpCod
    AND     PNF.CtrlDFSerie = NF.CtrlDFSerie
    AND     PNF.CtrlDFModForm = NF.CtrlDFModForm
    And     NF.NFNum NOT in (Select CD.CtrlMovDevDocNumOrig
      From CTRL_MOV_DEVOLUCAO CD, NOTA_FISCAL NF WITH(NOLOCK)
     WHERE NF.NFNum = CD.CtrlMovDevDocNumOrig
                              And NF.CtrlDFModForm = CD.CtrlMovDevDocEspecOrig
                              And NF.CtrlDFSerie =  CD.CtrlMovDevDocSerieOrig
                 And NF.NFNum = NF.NFNum
                              And CD.CtrlMovDevDocSerie <> '1')


    Order by 
    NF.NFTranspEntCod, ENTIDADE.EntCod, NF.NfDataEmis, NF.NfNum

    Ex: Procedure 

    USE [Apolo_Sim]
    GO
    /****** Object:  StoredProcedure [dbo].[USER_DIAS_UTEIS]    Script Date: 11/11/2013 14:25:36 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO


    ALTER PROCEDURE  [dbo].[USER_DIAS_UTEIS](@DATAINIC DATETIME, @DATAFIM DATETIME, @SABADO VARCHAR(5),
            @DOMINGO VARCHAR(5), @VFERIADO VARCHAR(5))
    as
    BEGIN
    DECLARE
            @DATA DATETIME,
             @DIASEMANA INTEGER,
             @QTDA INTEGER,
             @QTDDIAS NUMERIC(24,4)


            SELECT @DATA = @DATAINIC + 1

            SELECT @QTDDIAS  = 0

                  WHILE @DATA <= @DATAFIM
                  BEGIN


            SELECT @QTDDIAS = @QTDDIAS + 1

               SELECT @DIASEMANA=  DATEpart(dw, @DATA)

                    IF (@SABADO = 'Sim' and @DIASEMANA = 7)
                      begin
                                  select @QTDDIAS = @QTDDIAS - 1
                      end

                      IF (@DOMINGO = 'Sim' and @DIASEMANA = 1)
                      begin
                                  select @QTDDIAS = @QTDDIAS - 1
                      end

                      IF (@VFERIADO = 'Sim')
                      begin
                                   SELECT @QTDA = 0

                                   SELECT @QTDA = COUNT(1) FROM FERIADO with (nolock) WHERE FERDATA =  @DATA

                                   IF (@QTDA > 0)
                                   begin
                                         select @QTDDIAS = @QTDDIAS - 1
                                   end
                      end

                      SELECT @DATA = @DATA + 1

                          END

             Select @QTDDIAS As QtdDias

    END

     

    Obrigado

    Leandro Massena.

    segunda-feira, 11 de novembro de 2013 17:06

Respostas

Todas as Respostas

  • Deleted
    • Marcado como Resposta Giovani Cr quarta-feira, 20 de novembro de 2013 13:55
    segunda-feira, 11 de novembro de 2013 17:18
  • José, boa tarde!

    Você pode orientar como criar está Função? Sou novato no SQL. 

    abs

    Leandro Massena

    segunda-feira, 11 de novembro de 2013 17:26
  • Deleted
    • Marcado como Resposta Giovani Cr quarta-feira, 20 de novembro de 2013 13:55
    segunda-feira, 11 de novembro de 2013 17:36
  • José, Boa tarde!

    Acho que estou fazendo a sintaxe errada, recebo a mensagem de erro

    Mensagem 444, Nível 16, Estado 3, Procedimento DiasUteis, Linha 50
    Select statements included within a function cannot return data to a client.

    CREATE FUNCTION DiasUteis_TESTE
      (@DataInic datetime, @DataFim datetime, @Sabado varchar(5), @Domingo varchar(5), @VFeriado varchar(5))
      returns int with SCHEMABINDING as
    begin
    DECLARE
            @DATA DATETIME,
             @DIASEMANA INTEGER,
             @QTDA INTEGER,
             @QTDDIAS NUMERIC(24,4)


            SELECT @DATA = @DATAINIC + 1

            SELECT @QTDDIAS  = 0

                  WHILE @DATA <= @DATAFIM
                  BEGIN


            SELECT @QTDDIAS = @QTDDIAS + 1

               SELECT @DIASEMANA=  DATEpart(dw, @DATA)

                    IF (@SABADO = 'Sim' and @DIASEMANA = 7)
                      begin
                                  select @QTDDIAS = @QTDDIAS - 1
                      end

                      IF (@DOMINGO = 'Sim' and @DIASEMANA = 1)
                      begin
                                  select @QTDDIAS = @QTDDIAS - 1
                      end

                      IF (@VFERIADO = 'Sim')
                      begin
                                   SELECT @QTDA = 0

                                   SELECT @QTDA = COUNT(1) FROM FERIADO with (nolock) WHERE FERDATA =  @DATA

                                   IF (@QTDA > 0)
                                   begin
                                         select @QTDDIAS = @QTDDIAS - 1
                                   end
                      end

                      SELECT @DATA = @DATA + 1

                          END

             Select @QTDDIAS As QtdDias

    return @QtdDias
    end;

    segunda-feira, 11 de novembro de 2013 19:05
  • Deleted
    • Marcado como Resposta Giovani Cr quarta-feira, 20 de novembro de 2013 13:55
    segunda-feira, 11 de novembro de 2013 19:13
  • Deleted
    • Marcado como Resposta Giovani Cr quarta-feira, 20 de novembro de 2013 13:55
    segunda-feira, 11 de novembro de 2013 22:30
  • José, Boa tarde!

    Fiz conforme você orientou e resolveu o meu problema, obrigado pelas dicas.

    Att.

    Leandro Massena.

    terça-feira, 12 de novembro de 2013 15:21