Atualizar tabela baseada em outra

08/08/2011

0

Tenho duas tabelas. OPERA e CARGA. O campo Data_Conhecimento da tabela Carga está errado. O Campo Data da tabela OPERA está correto. A correlação existente entre as duas tabelas(Não é FK, porque elas estão em bancos diferentes, por isso copiamos as duas tabelas para um banco TEMP para corrigir) é o Campo CONTRATO na tabela OPERA e CONHECIMENTO na tabela CARGA. Logo, eu criei dois cursores(não sei se é necessário), um para trazer o Contrato e o outro para trazer o Conhecimento. A dúvida é como dar um while em um ou outro para ir dando Update na tabela Carga, baseada na informação no momento na tabela Opera. Eu tenho mais de 10.000.000 de registros em ambas. É um processo lento, tanto que no selct dá time out ou sem memória. Aproveito para perguntar como eu faço um select sem dá time out.
Pjava

Pjava

Responder

Posts

08/08/2011

Marco Pinheiro

Se entendi vc quer fazer algo + ou - assim:

UPDATE CARGA SET DATA = OPERA.DATA
FROM OPERA
WHERE CARGA.CONHECIMENTO = OPERA.CONTRATO

Você pode criar indices nas duas tabelas para fazer com mais rapidez.

Att.,

Marco.

Responder

08/08/2011

Pjava

Eu havia feito o update. A idéia do Cursor era apenas, que em algumas situações, iria receber um tratamento diferente, para um tipo específico de contrato, mas convencemos o cliente que isso era desnecessário e ele acatou nossa sugestão, logo um puro e simplewes update resolve. Estou com esse erro no meu update. Fiz um update(uma linha apenas) só para testar e depois fazer em todos os registros que possuem a anomalia(Data 1899-12-30), são essas data que devem ser atualizadas. O Update abaixo não funfa, porque?   update conhecimento_carga set data_emissao_conhecimento = (select opera.data from opera where opera.contrato = conhecimento_carga.numero_conhecimento and opera data >= '11/01/2010' and opera.data <= '02/28/2011' and opera.contrato = '101851') where numero_conhecimento = '101851' and data_emissao_conhecimento = '1899-12-30 00:00:00.000'
Responder

09/08/2011

Marco Pinheiro

O update dá erro ou não altera os dados corretamente?

Tente assim:

update
conhecimento_carga set data_emissao_conhecimento = (select opera.data from opera where opera.contrato = conhecimento_carga.numero_conhecimento and opera data >= '11/01/2010' and opera.data <= '02/28/2011' and opera.contrato = '101851') From opera whereopera.contrato = conhecimento_carga.numero_conhecimento and conhecimento_carga.numero_conhecimento = '101851' and conhecimento_carga.data_emissao_conhecimento = '1899-12-30 00:00:00.000'Att.,

Marco
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar