Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Blatt

Consulta Loop e Update

Recommended Posts

Pessoal,

 

Tenho a linha de código abaixo

 

DECLARE @sCliente varchar(100)
DECLARE @sQuery nvarchar(8000)

SET LANGUAGE BRAZILIAN

DECLARE C01 CURSOR FAST_FORWARD FOR
               SELECT    data_cod
                 FROM      i9.dbo.databases 
                   WHERE     data_cod <> 'todos'

OPEN C01
FETCH NEXT FROM C01 INTO @sCliente

WHILE (@@FETCH_STATUS = 0)
 BEGIN
               set @sQuery = 'SELECT LOJA_ID,
                                     LOJA_NOME,
                                     datepart(year,VEND_DT) as Ano,
                                     datepart(month, VEND_DT) as Mês_Num,
                                     datename(mm, VEND_DT)as Mês_Ext,
                                     Sum(VEND_VLR_FINAL) as Soma_Fat 
                                   FROM ' + @scliente + ' .dbo.LOJAS, ' + @scliente + ' .dbo.VENDAS' + '
                                     WHERE LOJA_ID = VEND_LOJA_ID AND
                                      datepart(year,vend_dt) >= 2010
                             GROUP BY LOJA_ID,
                                      LOJA_NOME,
                                      datepart(year,VEND_DT),
                                      datepart(month, VEND_DT),
                                      datename(mm, VEND_DT)
                             ORDER BY LOJA_NOME,
                                      datepart(year,VEND_DT),
                                      datepart(month, VEND_DT)' 

               EXEC sp_executesql @sQuery

               FETCH NEXT FROM C01 INTO @sCliente

 END   
CLOSE C01
DEALLOCATE C01

 

 

-------///----////------

 

O que preciso em fim:

 

1º - Consolidar o resultado dos Loop's em uma tabela só, pode ser #temp. ("As tabelas possuem a mesma estrutura só estão em Bancos diferentes).

2º - Tenho que abrir uma coluna que deve ser preenchida com o nome do Banco que veio a informação.

 

Gerando o resultado uma tabela só que pode ser exportada.

 

Por favor me ajudem não estou conseguindo.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este seu "cursor" funciona?

Se sim, só você criar uma tabela temporaria para inserir os dados, antes do EXEC.

No exec, você pode colocar exec (@sQuery), desde que sua versão seja > que o SQL 2000

Na hora que você monta no SQL, coloca o nome do banco (se bem que nao entendi mto bem oque queria)

Qual a versão do SQL em questão?

Abçs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este seu "cursor" funciona?

Se sim, só você criar uma tabela temporaria para inserir os dados, antes do EXEC.

No exec, você pode colocar exec (@sQuery), desde que sua versão seja > que o SQL 2000

Na hora que você monta no SQL, coloca o nome do banco (se bem que nao entendi mto bem oque queria)

Qual a versão do SQL em questão?

Abçs

 

-----////-----

A.Jr,

 

A versão que uso é o 2005.

Sim o Loop funciona mais gera um result para cada banco, gostaria que viesse somente um.

 

-----////-----

A.Jr,

 

A versão que uso é o 2005.

Sim o Loop funciona mais gera um result para cada banco, gostaria que viesse somente um.

 

Obs: Essa linhas aqui FROM i9.dbo.databases tem o nome de todos os bancos nessa tabela ai ele varre todos eles no loop.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos por partes

você poderia utilizar isso:

EXEC SP_MSFOREACHDB 'SELECT ''?'''

De uma olhada no resultado, e com certeza pode lhe ajudar.

Agora ao seu contexto:

Bom, vamos por partes <br>
você poderia utilizar isso: <br>
[sql]EXEC SP_MSFOREACHDB 'SELECT ''?'''

<br>

De uma olhada no resultado, e com certeza pode lhe ajudar. <br>

Agora ao seu contexto:


if object_id ('tempdb..#table') is not null
drop table #table

create table #table
(
LOJA_ID int,
LOJA_NOME varchar(max),
Ano datetime,
[Mês_Num] varchar(max), -- confirme o tipo de dado
[Mês_Ext] varchar(max), -- confirme o tipo de dado
Soma_Fat float
)

DECLARE @sCliente varchar(100)
DECLARE @sQuery nvarchar(8000)

SET LANGUAGE BRAZILIAN

DECLARE C01 CURSOR FAST_FORWARD FOR
               SELECT    data_cod
                 FROM      i9.dbo.databases 
                   WHERE     data_cod <> 'todos'

OPEN C01
FETCH NEXT FROM C01 INTO @sCliente

WHILE (@@FETCH_STATUS = 0)
 BEGIN
               set @sQuery = 'SELECT LOJA_ID,
                                     LOJA_NOME,
                                     datepart(year,VEND_DT) as Ano,
                                     datepart(month, VEND_DT) as Mês_Num,
                                     datename(mm, VEND_DT)as Mês_Ext,
                                     Sum(VEND_VLR_FINAL) as Soma_Fat 
                                   FROM ' + @scliente + ' .dbo.LOJAS, ' + @scliente + ' .dbo.VENDAS' + '
                                     WHERE LOJA_ID = VEND_LOJA_ID AND
                                      datepart(year,vend_dt) >= 2010
                             GROUP BY LOJA_ID,
                                      LOJA_NOME,
                                      datepart(year,VEND_DT),
                                      datepart(month, VEND_DT),
                                      datename(mm, VEND_DT)
                             ORDER BY LOJA_NOME,
                                      datepart(year,VEND_DT),
                                      datepart(month, VEND_DT)' 

insert into #table
exec (@sQuery)
--                EXEC sp_executesql @sQuery

               FETCH NEXT FROM C01 INTO @sCliente

 END   
CLOSE C01
DEALLOCATE C01

 

<br><br>

 

Deve funcionar

 

Teste e veja o resultado.

Deve funcionar

 

Teste e veja o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.