none
Consulta com While resultando sequencialmente RRS feed

  • Pergunta

  • Pessoal, tenho um consulta da com a seguinte estrutura

    declare @datainicial datetime
    declare @datafinal datetime
    set @datainicial = '20130501'
    set @datafinal = '20130531'
    
    while @datainicial <= @datafinal
    begin
    select xxx, bbb, ccc
    where ccc = @datainicial
    set @datainicial = @dainicial + 1
    end

    Ocorre que o resultado está sendo apresentado em várias querys, e eu gostaria que fossem resultados em apenas 1 query, uma linha embaixo da outra, como em uma consulta simples.

    Tentei utilizar tabela temporária, mas não funcionou, ele insere o primeiro resultado e quando vai inserir o segundo dá violação dizendo que a tabela já existe.

    Como devo proceder ?




    Gregorio

    terça-feira, 9 de julho de 2013 14:08

Todas as Respostas

  • Deleted
    terça-feira, 9 de julho de 2013 22:50
  • José, obrigado pela atenção.

    Entretanto não posso realizar a consulta desta forma, haja visto que, tenho várias subconsultas inseridas entre o begin e o end.

    Tenho que trazer muitas informações, uma pra cada dia específico, inclusive buscando informações em tabelas e bancos diferentes, se eu colocar: 

    "where ccc between @datainicial and @datafinal" não vai dar certo, mesmo que eu utilizasse um group by, ou distinct.


    Gregorio

    quarta-feira, 10 de julho de 2013 17:35
  • Boa tarde,

    Gregorio, acho que o script abaixo talvez possa ajudar nessa questão:

    declare @datainicial datetime;
    declare @datafinal datetime;
    set @datainicial = '20130501';
    set @datafinal = '20130531';
    
    with CTE_D as
    (
        select @datainicial as data, @datafinal as datafinal
        
        union all
        
        select DATEADD(DAY, 1, data), datafinal
        from CTE_D
        where data < datafinal
    )
    
    select t.* 
    from CTE_D as c,
    cross join Tabela as t
    where c.data = t.Data

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 10 de julho de 2013 18:22
  • Deleted
    sexta-feira, 12 de julho de 2013 01:02
  • Com variável table é simples também.

    Você apenas tem que deixar a declaração fora do laço.

    declare @datainicial datetime
    declare @datafinal datetime
    set @datainicial = '20130501'
    set @datafinal = '20130531'
    
    declare @tabela table(campo1 tipo, campo2 tipo, campo3 tipo)
    
    while @datainicial <= @datafinal
    begin
    insert into @tabela select xxx, bbb, ccc
    where ccc = @datainicial
    set @datainicial = @datainicial + 1
    end
    
    select * from @tabela

    Até.


    Antero Marques

    segunda-feira, 15 de julho de 2013 12:37