Usuário com melhor resposta
"Qtdes" iguais em 2 tabelas diferentes

Pergunta
-
olá,
//Producao.QtdProd = Estoque.QtdEstoque//
Se foi produzido uma qtde XXX, entao no estoque só poderá ter XXX. É uma lógica...
o que ocorre é que tem apontamentos errados e eu preciso tratar esta situacao (Producao.QtdProd = Estoque.QtdEstoque)
TABELA.CAMPO
Producao.QtdProd
Estoque.QtdEstoque
Entao, quando extraio informacaoes fica bem complicado de se entender e eu perco tempo no s logs pra saber qual usuario apontou errado e quando...
NumPed QtdProd QtdEstoque
12345 4000 4000 CORRETO
23456 7000 8000 ERRADO
01 - Existe alguma forma de eu fazer esta consistencia quando o usuário for gravar estas qtdes?
02 - Existe alguma forma de eu fazer esta consistencia depois de gravar?
03 - Tem como eu retornar uma mensagem ao usuário?
Respostas
-
Bom Dia,
Você poderá fazer esse controle através de uma trigger.
Dessa forma, sempre que alguém for cadastrar algo na tabela de Estoque é feita uma verificação na tabela de Produção para testar suas regras.
Não há como mandar uma mensagem ao usuário uma vez que o SQL Server não pode "mandar uma mensagem". O que você pode fazer é que caso a regra seja violada, lançar uma exceção e fazer com que sua aplicação trate essa exceção e envie uma mensagem ao usuário.
1 CREATE TRIGGER trgIVerificaQuantidade ON Estoque 2 FOR INSERT 3 AS 4 BEGIN 5 IF EXISTS ( 6 SELECT * FROM Estoque AS E 7 INNER JOIN INSERTED AS INS ON INS.IDProd = E.IDProd 8 AND E.QTD != INS.QTD) 9 BEGIN 10 RAISERROR('A quantidade inicial do estoque não pode ser diferente da quantidade produzida') 11 ROLLBACK 12 END 13 END
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta ericosimionatto quarta-feira, 4 de fevereiro de 2009 11:59
Todas as Respostas
-
Bom Dia,
Você poderá fazer esse controle através de uma trigger.
Dessa forma, sempre que alguém for cadastrar algo na tabela de Estoque é feita uma verificação na tabela de Produção para testar suas regras.
Não há como mandar uma mensagem ao usuário uma vez que o SQL Server não pode "mandar uma mensagem". O que você pode fazer é que caso a regra seja violada, lançar uma exceção e fazer com que sua aplicação trate essa exceção e envie uma mensagem ao usuário.
1 CREATE TRIGGER trgIVerificaQuantidade ON Estoque 2 FOR INSERT 3 AS 4 BEGIN 5 IF EXISTS ( 6 SELECT * FROM Estoque AS E 7 INNER JOIN INSERTED AS INS ON INS.IDProd = E.IDProd 8 AND E.QTD != INS.QTD) 9 BEGIN 10 RAISERROR('A quantidade inicial do estoque não pode ser diferente da quantidade produzida') 11 ROLLBACK 12 END 13 END
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Marcado como Resposta ericosimionatto quarta-feira, 4 de fevereiro de 2009 11:59
-
-
Demétrio Silva disse:
Além da dica citada por Gustavo, você pode tratar isso direto na aplicação, sendo assim, menos problemático e difícil de manter do que triggers.
Abraços
Demétrio Silva
Demétrio
O problema é que a aplicação é terceirizada. Os caras nao abrem o sistema a ponto do cliente(eu) conseguir implementar, e também nao querem tratam a situação. Achei um absurdo. Por isso recorri ao fórum.
obrigado
>adm de rede e iniciante SQLServer -