Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

Dúvida na criação do Update


Xhenrique

Posts Recomendados


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Estou tentando fazer uma atualização na minha tabela de Tarefas (MTRF), eu já criei o select que busca as informações que eu quero inserir :

select busca.coligada, busca.projeto, busca.tarefa, min(busca.data) dt_inicio, max(busca.data) dt_final, busca.percentual

from ((select mperiodo.codcoligada coligada, mperiodo.idprj projeto, mperiodo.dtinicio data, busca_ini.idtrf tarefa, busca_ini.percentual

from mperiodo inner join

(SELECT mtrfreal.codcoligada coligada, mtrfreal.idprj projeto, mtrfreal.idtrf, min(mtrfreal.numperiodo) ini, sum(percrealizado) percentual

from mtrfreal group by mtrfreal.codcoligada, mtrfreal.idprj, mtrfreal.idtrf) as busca_ini on busca_ini.projeto=mperiodo.idprj

and busca_ini.ini=mperiodo.idperiodo

and busca_ini.coligada=mperiodo.codcoligada)

union

(select mperiodo.codcoligada coligada, mperiodo.idprj projeto, mperiodo.dtfim data, busca_fim.idtrf tarefa, busca_fim.percentual

from mperiodo inner join

(SELECT mtrfreal.codcoligada coligada, mtrfreal.idprj projeto, mtrfreal.idtrf, max(mtrfreal.numperiodo) final, sum(percrealizado) percentual

from mtrfreal group by mtrfreal.codcoligada, mtrfreal.idprj, mtrfreal.idtrf) as busca_fim on busca_fim.projeto=mperiodo.idprj

and busca_fim.final=mperiodo.idperiodo

and busca_fim.coligada=mperiodo.codcoligada)) busca

group by busca.coligada, busca.projeto, busca.tarefa, busca.percentual

Agora estou 'apanhando' na sintaxe do minha stored procedure para efetuar esta atualização, já que eu irei inserir apenas dt_inicio --> mtrf.datainicioreal, dt_final --> mtrf.datafimreal e busca.percentual-->mtrf.percconcluido onde coligada=mtrf.codcoligada, projeto=mtrf.idprj e tarefa=mtrf.idtrf .

Caso alguém possa me ajudar ou ter uma forma mais fácil agradecerei.....

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  117
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  735
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  45

Tais tentando no SQL? ou no Oracle?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Olá Henrique, caso seja SQL.

minhas sugestões são:

* Adicionar o resultado do select em uma tabela temporária, principalmente caso o resultset do teu select for muito grande.

* Caso necessário crie indices na tabela temporária, pois, caso vc vá utilizalar condições no insert isso melhorará a performance.

* Coloque manupilação em uma transação(begin tran...end)

Exemplo:

create proc XXXXX

as

--cria tabela temporária

if exists(select 1 from tempdb..sysobjects where name like '%#tabelatemporaria%')

drop table #tabelatemporaria

create table #tabelatemporaria

(coligada...,

projeto...,

dt_inicio...,

dt_Final,

percentual ...)

begin

-- Insira os dados na tabela temporária

insert into #tabelatemporaria

select busca.coligada, busca.projeto ..... --adicione aqui todo a sua sentença

-- Crie índices na tabela temporária se for o caso, ex:

create clustered index idx01 on #tabelatemporaria(campos...)

create nonclustered index idx02 on #tabelatemporaria(campos...)

-- Insira os dados na tabela destino(em produção)

insert into tabeladestino

select * from #tabelatemporaria where .....

end

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Juba, estou fazendo no Sql Server 2005...

Emanuel, valeu pela resposta, vou esta tentando aqui... Ainda não estou familiarizado com a sintaxe, mas entendi... Vc usou um 'insert into' e eu estou querendo fazer é uma atualização em apenas algumas tuplas, o melhor será usar 'update' né?... Caso eu consiga postarei a resolução...

Valeu...

Eu estava imaginando assim....

CREATE PROCEDURE [dbo].[sp_ParaTeste]

AS

BEGIN

SET NOCOUNT ON;

update MTRF set

mtrf.codcoligada=resultado.coligada, mtrf.idprj=resultado.projeto, mtrf.idtrf=resultado.tarefa,

mtrf.datainicioreal=resultado.dt_inicio, mtrf.datafimreal=resultado.dt_final,

mtrf.percconcluido=resultado.percentual from

(...... Aquele comando anterior ...........) resultado

WHERE resultado.coligada=mtrf.codcoligada

and resultado.projeto=mtrf.idprj

and resultado.tarefa=mtrf.idtrf

and resultado.projeto=376

END

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Essa procedure anterior não dá erro mas não atualiza a tabela!!!!!!!!!!!!!!!!!!

Por favor alguém sabendo o q falta agradecerei......

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Olá Henrique, ainda não consegui visualizar falha na sentença, pergunto: existe alguma condição na sentença que faça com que não seja retornado valor algum à ser alterado?

Faz o segunite, a sentença abaixo é a da procedure de update que vc criou, eu apenas alterei para select, execute e verifique se existe um retorno de dados.

select mtrf.codcoligada=resultado.coligada, mtrf.idprj=resultado.projeto, mtrf.idtrf=resultado.tarefa,

mtrf.datainicioreal=resultado.dt_inicio, mtrf.datafimreal=resultado.dt_final,

mtrf.percconcluido=resultado.percentual from

(...... Aquele comando anterior ...........) resultado

WHERE resultado.coligada=mtrf.codcoligada

and resultado.projeto=mtrf.idprj

and resultado.tarefa=mtrf.idtrf

and resultado.projeto=376

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Outra coisa, no "from" falta tabela mtrf pra vc fazer o join.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Emanuel segue o anexo do resultado da consulta:

SELECT mtrf.codcoligada, resultado.coligada,

mtrf.idprj, resultado.projeto,

mtrf.idtrf, resultado.tarefa,

mtrf.datainicioreal, resultado.dt_inicio,

mtrf.datafimreal, resultado.dt_final,

mtrf.percconcluido, resultado.percentual

from MTRF(NOLOCK),

(...... Aquele Comando do Começo do post .........) resultado

WHERE resultado.coligada=mtrf.codcoligada

and resultado.projeto=mtrf.idprj

and resultado.tarefa=mtrf.idtrf

and resultado.projeto=376

Resultado_Consulta.rar

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Henrique, fiz umas simulações aqui criando uma sentença parecida e deu tudo certo, ainda não descobri o que esta acontecendo com a sua.

Abs.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Henrique, vc checou se os dados já foram alterados?

O "SET NOCOUNT ON" faz com que não seja retornado aviso do numero de linhas afetadas.

quando vc fala que a tua procedure não alterou nada, eu estou supondo que vc esta conferindo a tabela, não esperando um aviso na tela.

caso vc esteje visualizar uma mensagem use "SET NOCOUNT OFF"

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Emanuel pior é que ainda não atualizou!! Este anexo foi criado depois q eu já rodei umas 10 vezes a procedure.... Sei lá, parece q ele não efetua a escrita!?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

O que retorna como mensagem de saída quando vc utiliza "set nocout off" na procedure?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  6
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  25
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  185
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  43

Command(s) completed successfully.

Opsss iiii faltava o " ; " depois do end

Deu certo eeehhhhhhh

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

tenta o seguinte,

altera a procedure para refletir "set nocount off" e depois, executa:

EXEC sua_Procedure WITH RECOMPILE

go

EXEC sua_Procedure

Resolveu?

Blz!, precisando estou as ordens.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.