ajuda com update

SQL Server

16/01/2013

Pessoal,

Tenho esta query que me retorna 281 registros.
Abaixo faço um update de acordo com essa consulta.
Ao fazer o update só atualiza 238. Se alguém tiver alguma idéia... eu agradeço muito.

select tm.numeromov,tm.dataemissao,tm.IDMOV,ttm.NSEQITMMOV,tp.CODIGOREDUZIDO,tp.DESCRICAO,ttmf.NATREC,tpc.natrec as natrecprod,tpf.SITUACAOMERCADORIA,
tpf.SITTRIBUTARIACOFINS,tpf.SITTRIBUTARIAPIS,tm.CODTMV
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
left join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like ('2.2%') and tm.codtmv not in('2.2.02','2.2.25')

and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013' and tpc.NATREC is not null
order by TM.NUMEROMOV




update ttmf set ttmf.NATREC = tpc.NATREC
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
left join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like '2.2%' and tm.codtmv not in ('2.2.02','2.2.25')

and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013'

Victor Pavia

Victor Pavia

Curtidas 0

Respostas

Alex Lekao

Alex Lekao

16/01/2013

Oi, boa tarde!!!

Cara eu não entendi seu script honestamente... mas dando uma olhada entre o select e o update a única coisa que vi que tinha em um e não tinha no outro era isto "and tpc.NATREC is not null" no update.

naso sei se sera isto.

eu normalmente não uso inner join, somente left join, naso sei se isto ajudaria montar diferente poderia influenciar.

espero que ajude.

Abraco.

Alex - Lekao
GOSTEI 0
Bruno Leandro

Bruno Leandro

16/01/2013

eu mudei a amarração no select de left join para inner na tabela TITMMOVFISCAL, veja quantos registros retornam, se retornar igual ao comando update provavelmente só existe essa quantidade de registros para esse filtro no movimento fiscal, e como ta com left caso nao exista ele tambem ira trazer um registro



select tm.numeromov,tm.dataemissao,tm.IDMOV,ttm.NSEQITMMOV,tp.CODIGOREDUZIDO,tp.DESCRICAO,ttmf.NATREC,tpc.natrec as natrecprod,tpf.SITUACAOMERCADORIA,
tpf.SITTRIBUTARIACOFINS,tpf.SITTRIBUTARIAPIS,tm.CODTMV
from TMOV tm
inner join TITMMOV ttm on (tm.IDMOV = ttm.IDMOV)
inner join tprd tp on (tp.idprd = ttm.idprd)
left join TPRDFISCAL tpf on (tp.IDPRD = tpf.IDPRD)
inner join TITMMOVFISCAL ttmf on (ttmf.IDMOV = ttm.IDMOV and ttmf.NSEQITMMOV = ttm.NSEQITMMOV)
left join TPRDCOMPL tpc on (tpc.IDPRD = tp.IDPRD)

where tm.codtmv like ('2.2%') and tm.codtmv not in('2.2.02','2.2.25')

and tpf.SITTRIBUTARIACOFINS in ('04','06','09')
and ((ttmf.natrec is null)or(ttmf.natrec = ''))
and tm.DATAEMISSAO >= '01/12/2012'
and tm.DATAEMISSAO <= '16/01/2013' and tpc.NATREC is not null
order by TM.NUMEROMOV
GOSTEI 0
Victor Pavia

Victor Pavia

16/01/2013

Fala Bruno. É isso mesmo cara. Deu certinho. Eu não me toquei disso. Mas ta certinho.

Valeu mesmo...
GOSTEI 0
José

José

16/01/2013

Victor obrigado por confirmar a solução, sendo assim estou dando o tópico por concluído,
GOSTEI 0
POSTAR