Tenho um titulo com campo cdempresa, baixa com campo cdempresa.
O cdempresa em titulo é a empresa dona no titulo, do baixa não necessariamente é a empresa dona, pois pode ocorrer de outra empresas pagar este título (onde chamamos de mútuo, já esta na regra de negócio, não posso mudar)
Tenho que fazer um update na baixa, mas somente quando o título for da empresa que passarei.
Tentei fazer assim:
update ecpgbaixa
set ecpgbaixa.dtcontabil = ecpgbaixa.dtpagto
where ecpgbaixa.dtcontabil is null
and ecpgbaixa.dtpagto > '2010.7.22'
and ecpgtitulo.nutitulo = ecpgbaixa.nutitulo
and ecpgtitulo.cdempresa = 7;
commit;
Mas não deu certo, ocorre o seguinte erro:
[code]
The next statement causes the following error:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
ECPGTITULO.NUTITULO.
At line 5, column 16.
[code]
Estou utilizando firebird, mas tenho que deixar de forma que possa ser rodado em qualquer banco.
Pergunta. Tem como fazer o que estou tentando?
EDIT
Antes que alguem comente, já pesquisei e não encontrei minha resposta, somente update em duas tabelas simultaneas.
tenta algo assim
UPDATE ecpgbaixa eb SET eb.dtcontabil = eb.dtpagto
WHERE (Select 1 From ecpgtitulo et
where eb.dtcontabil is null
and eb.dtpagto > '2010.7.22'
and et.nutitulo = eb.nutitulo
and et.cdempresa = 7)
Neste meio tempo tentei isso, mas não rola.
da msg
The next statement causes the following error:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command - line 6, column 37.
[quote=avsouza]Neste meio tempo tentei isso, mas não rola.
da msg
The next statement causes the following error:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command - line 6, column 37.
[/quote]
Vc tentou o mesmo sql que passei? Ou tentou outro parecido?
Testei o que vc passou tb.
Dá a msg acima
Tenta fazer um cast na sua string de data!
Qual o banco de dados que vc usa?
Firebird, mas não posso me focar somente nele, pois alguns clientes usarão sqlserver (ja resportado pra nós) mas pode aparecer outro dizendo que vai usar oracle p.e.
esse erro de token, informa que tem algum simbolo ou caracter inválido na consulta.
Esse modelo de consulta funciona em qualquer banco, não tem nada de especial.
Tem que ver se na hora de executar, não precisa colocar um ponto e virgula no final, depois dos parenteses, ou no retirar um ponto e virgula.
Coloca a consulta que vc executou que gerou esse erro SQL error code = -104, assim fica melhor de identificar.
o erro aconteceu com a sua consulta
Conforme essa mensagem Unexpected end of command - line 6, column 37.
tem alguma coisa na consulta que o banco não está reconhecendo, como já citei, um caracter ou até mesmo um espaço em branco pode ser.
Esse update vc está fazendo direto no gerenciador do banco ou está executando pela aplicação ?
Direto pelo gerenciador, ja tentei com e sem o “;”.
Com ; da essa msg
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, column 38.
;.
sem ;
da essa
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Unexpected end of command - line 6, column 37.
Seguinte, esse 1° Sql que te passei funciona no MySql, foi onde eu tinha testado ele.
Chegando em casa, testei no InterBase e gerou o mesmo erro que apresentou para vc no FireBird.
Então mudei o Sql, e passou a funcionar no MySql e no InterBase, testa agora pra ver se funciona ok.
UPDATE ecpgbaixa eb SET eb.dtcontabil = eb.dtpagto
WHERE EXISTS (Select 1 From ecpgtitulo et
where eb.dtcontabil is null
and eb.dtpagto > '2010.7.22'
and et.nutitulo = eb.nutitulo
and et.cdempresa = 7)
Blz, rolou, vou aproveitar a ideia e adaptar para o sqlserver.
vlw
EDIT:
no maldito sqlserver fica assim (por causa do alias):
UPDATE eb SET eb.dtcontabil = eb.dtpagto from ecpgbaixa eb
WHERE EXISTS (Select 1 From ecpgtitulo et
where eb.dtcontabil is null
and eb.dtpagto > '2010.7.22'
and et.nutitulo = eb.nutitulo
and et.cdempresa = 7)