Meu update atualiza para null e não o valor correto
10/08/2011
0
Esse é meu script
O que eu quero. Tenho uma tabela chamada Opera e nessa tabela tenho dois campos importantes: Contrato e Data. O campo contrato equivale ao camo numero_conhecimento na tabela Conhecimento_Carga, porem na tabela Opera, eu posso ter vários registros com o mesmo valor. O que vai diferir é a data, que só pode ter uma. Acontece que na tabela Conhecimento_Carga, eu tenho um campo chamado data_emissao_conhecimento. Nessa tabela, devido a um erro que deu no passado(antes de eu entrar na empresa), todas as datas foram atualizadas para: 1899-12-30 00:00:00.000. Então eu preciso atualizar essa data_emissao_conhecimento, baseada na data da Tabela Opera. Mas eu só posso atualizar para os registros que tenham o mesmo contrato equivalente com o numero_conhecimento da tabela Conhecimento_Carga e desde que as datas na tabela Opera esteja entre Nov/2010 a Fev/2011, esse é o critério. Fui atualizar dois contratos e atualizou para NULL. O q tá errado nesse script?
Fica assim então. Para definir um registro, eu tenho a seguinte regra:
Conhecimento_Carga: Numero_Conhecimento, Data_Emissao_Conhecimento e Filial_Origem
Opera: Contrato, Data,Cod_Credenciada
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')) where data_emissao_conhecimento = '1899-12-30 00:00:00.000' and data_emissao_real < '11/01/2010
Pjava
Curtir tópico
+ 0
Responder
Posts
10/08/2011
Pjava
Acertei o script para esse e agora tá ok. O problema do NULL é que não encontra nada que satisfaça ao critério ele preenche com NULL o que está correto. Eu gostaria de fazer é se caso não ache correspondência, ele manter a data errada mesmo, ou seja, a data de '1899-12-30 00:00:00.000'. Como eu faço isso no Script?
update
conhecimento_carga
set
data_emissao_conhecimento =
(select
convert(varchar(30),opera.data,21) from opera
where
opera.contrato = conhecimento_carga.numero_conhecimento and
opera.cod_credenciada = conhecimento_carga.filial_origem and
opera.data = conhecimento_carga.data_emissao_real and
(opera.data >= '11/01/2010' and opera.data <= '02/28/2011'))
where
data_emissao_conhecimento = '1899-12-30 00:00:00.000'
Responder
10/08/2011
Wilson Junior
Teste assim
Espero ter colaborado.
update conhecimento_carga set data_emissao_conhecimento = COALESCE( (select convert(varchar(30),opera.data,21) from opera where opera.contrato = conhecimento_carga.numero_conhecimento and opera.cod_credenciada = conhecimento_carga.filial_origem and opera.data = conhecimento_carga.data_emissao_real and (opera.data >= '11/01/2010' and opera.data <= '02/28/2011')), data_emissao_conhecimento ) where data_emissao_conhecimento = '1899-12-30 00:00:00.000'
Espero ter colaborado.
Responder
Clique aqui para fazer login e interagir na Comunidade :)