Inquiridor
Transaction - Insert e Update

Pergunta
-
Caros Colegas
Cenário:
Criei uma Área de Trabalho para meu usuário que é montada após a criação de uma query e apresenta os dados em várias colunas.
Existe uma tabela principal as demias fazem referencia a ela usando LEFT INNER JOIN, consequentemente quando os dados não existem nas tabelas filhas a coluna fica como NULL, até aqui Blz
Quando o usuário deseja gravar abro uma Transação e dentro da Transação um FOR para percorrer cada linha e cada coluna alterada aqui Blz também.
Problema:
Para os campos que estão como NULL, faço um INSERT, acontece que se duas colunas da mesma tabela estava como NULL ocorrem dois INSERTS para o mesmo ID.
Isto acontece poque apesar de eu verificar se o registro existe a transação não executou o Commit logo minha verificação retorna False e permite o INSERT ao invés do UPDATE.
Gostaria de ajuda ou dica para tentar fazer a verificação mesmo nas informações que não dofreram um commit.
Obrigado
Todas as Respostas
-
-
OK, muito obrigado pelo interesse.
Exemplo:
Duas tabelas PRINCIPAL ( PRODUTOS ) e SECUNDÁRIA ( PRODUTOSIMPOSTOS )
Ao criar uma query que preenche uma área de trabalho que se possa manipular os dados, a query usa LEFT OUTER JOIN, todos os dados de PRODUTOS irão aparecer mesmo que em PRODUTOSIMPOSTOS não exista.
Logo um item de PRODUTOS ( MOUSE 2 BOTOES ) que não tenha ICMS de compra e venda preenchido virá para tela assim:
DESCRICAO ICMSCOMPRA ICMSVENDA
MOUSE 2 BOTOES NULL NULL
Ai o usuário em sua tela preenche o ICMSCOMPRA = 18 e ICMSVENDA = 18, minha função que tem uma transação e navega pelas colunas irá fazer DOIS INSERTS, isto porque em minha rotina que irá verificar os dados em PRODUTOSIMPOSTOS não irá encontrar o registro, porque a transação não executou o COMMIT.
Obrigado
Bene
-
Benê você pode usar o hint WHIT(READUNCOMMITTED) para ler os dados da tabela. Usando esta opção o SQL irá ler também os registros que ainda não foram comitados, mas muito cuidado ao usar isso porque os registros lidos podem sofrer um ROLLBACK e dai as informações lidas já não existem mais.
Um exemplo do uso do hint seria assim:
select * from tabela with(readuncommitted)
-