Atualizar tabela baseada em outra
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
Curtidas 0
Respostas
Marco Pinheiro
08/08/2011
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.
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.
GOSTEI 0
Pjava
08/08/2011
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'
GOSTEI 0
Marco Pinheiro
08/08/2011
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
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
GOSTEI 0