none
View Agenda RRS feed

  • Pergunta

  • Boa Tarde, tudo bem?

    Eu preciso fazer uma view pra mostrar em um grid de uma agenda, onde em apresento com intervalo de 30 minutos, mostrando os horarios ja agendados.

    Como eu poderia fazer essa view?

    Tenho como campos principais AgendamentoData, AgendamentoHora.

    terça-feira, 25 de junho de 2019 15:07

Respostas

  • Davi,

    Veja se estes exemplos te ajudam, utilizando CTE:

    Declare @AgendamentoData Date, @AgendamentoHoraInicial Time, @AgendamentoHoraFinal Time
    
    Set @AgendamentoData=GetDate()
    Set @AgendamentoHoraInicial='08:00'
    Set @AgendamentoHoraFinal='18:00'
    
    ;With AgendaDeHorarios(Data, Hora)
    As
    (
        Select @AgendamentoData As Data, @AgendamentoHoraInicial As Hora
        Union All
        Select Data, DateAdd(MINUTE,30, Hora) From AgendaDeHorarios
        Where Hora <= @AgendamentoHoraFinal
    )
    Select Data, Hora From AgendaDeHorarios
    Go

    -- Utilizando Function --

    -- Criando a Function --
    Create Function F_AgendaDeHorarios (@AgendamentoData Date, @AgendamentoHora TIME)
    RETURNS @Agenda Table
    (Codigo TinyInt Identity(1,1),
     Data Date,
     Horario Time)
    AS
    Begin
    
        Insert Into @Agenda Values(@AgendamentoData, @AgendamentoHora)
      
        While @AgendamentoHora <= '18:00'
        Begin
         Insert Into @Agenda (Data, Horario)
         Select Top 1 Data, DateAdd(MINUTE,30, Horario) From @Agenda
         Order By Codigo Desc
    
         Set @AgendamentoHora = DateAdd(Minute,30, @AgendamentoHora)
        End
     Return
    End
    Go
    
    -- Executando a Function --
    Select * From F_AgendaDeHorarios ('2019-06-25','15:00')
    Go
    

    Pegando o resultado da Function e utilizando como uma Tabela e View:

    -- Inserindo o Resultado em uma Tabela --
    Select * Into AgendaDeHorarios From F_AgendaDeHorarios ('2019-06-25','15:00')
    Go 
    
    -- Criando uma View --
    Create View V_ExibirAgendamentoHorarios
    As
     Select * From AgendaDeHorarios
    
    -- Executando a View --
    Select * From V_ExibirAgendamentoHorarios
    Go

    Ressalto que este é um exemplo, um esboço de código, em nenhum momento eu levei em consideração suas regras de negócio, bem como, seus dados ou tabelas.

    Espero que ajude.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    • Editado Junior Galvão - MVPMVP terça-feira, 25 de junho de 2019 18:33 Editando o conteúdo da resposta
    • Marcado como Resposta DaviSaba terça-feira, 25 de junho de 2019 19:12
    terça-feira, 25 de junho de 2019 17:53

Todas as Respostas

  • Davi,

    Veja se estes exemplos te ajudam, utilizando CTE:

    Declare @AgendamentoData Date, @AgendamentoHoraInicial Time, @AgendamentoHoraFinal Time
    
    Set @AgendamentoData=GetDate()
    Set @AgendamentoHoraInicial='08:00'
    Set @AgendamentoHoraFinal='18:00'
    
    ;With AgendaDeHorarios(Data, Hora)
    As
    (
        Select @AgendamentoData As Data, @AgendamentoHoraInicial As Hora
        Union All
        Select Data, DateAdd(MINUTE,30, Hora) From AgendaDeHorarios
        Where Hora <= @AgendamentoHoraFinal
    )
    Select Data, Hora From AgendaDeHorarios
    Go

    -- Utilizando Function --

    -- Criando a Function --
    Create Function F_AgendaDeHorarios (@AgendamentoData Date, @AgendamentoHora TIME)
    RETURNS @Agenda Table
    (Codigo TinyInt Identity(1,1),
     Data Date,
     Horario Time)
    AS
    Begin
    
        Insert Into @Agenda Values(@AgendamentoData, @AgendamentoHora)
      
        While @AgendamentoHora <= '18:00'
        Begin
         Insert Into @Agenda (Data, Horario)
         Select Top 1 Data, DateAdd(MINUTE,30, Horario) From @Agenda
         Order By Codigo Desc
    
         Set @AgendamentoHora = DateAdd(Minute,30, @AgendamentoHora)
        End
     Return
    End
    Go
    
    -- Executando a Function --
    Select * From F_AgendaDeHorarios ('2019-06-25','15:00')
    Go
    

    Pegando o resultado da Function e utilizando como uma Tabela e View:

    -- Inserindo o Resultado em uma Tabela --
    Select * Into AgendaDeHorarios From F_AgendaDeHorarios ('2019-06-25','15:00')
    Go 
    
    -- Criando uma View --
    Create View V_ExibirAgendamentoHorarios
    As
     Select * From AgendaDeHorarios
    
    -- Executando a View --
    Select * From V_ExibirAgendamentoHorarios
    Go

    Ressalto que este é um exemplo, um esboço de código, em nenhum momento eu levei em consideração suas regras de negócio, bem como, seus dados ou tabelas.

    Espero que ajude.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    • Editado Junior Galvão - MVPMVP terça-feira, 25 de junho de 2019 18:33 Editando o conteúdo da resposta
    • Marcado como Resposta DaviSaba terça-feira, 25 de junho de 2019 19:12
    terça-feira, 25 de junho de 2019 17:53
  • Eu iria realmente perguntar como eu faria para utilizar, se deveria criar uma procedure ja que tem variaveis ...

    Mas voce editou e complementou.

    Agradeço muito a ajuda!

    Obrigado
    terça-feira, 25 de junho de 2019 19:14