Meu update atualiza para null e não o valor correto

10/08/2011

0

Esse é meu script
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
  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
Pjava

Pjava

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
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

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