none
"Qtdes" iguais em 2 tabelas diferentes RRS feed

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

    quarta-feira, 4 de fevereiro de 2009 02:49

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
    quarta-feira, 4 de fevereiro de 2009 10:46

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
    quarta-feira, 4 de fevereiro de 2009 10:46
  • 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
    quarta-feira, 4 de fevereiro de 2009 11:57
  • 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
    quarta-feira, 4 de fevereiro de 2009 12:02
  • Dessa forma só usando a solução de Gustavo mesmo.

    Abraços
    Demétrio Silva
    quarta-feira, 4 de fevereiro de 2009 16:35