none
Inserindo dados de 2 tabelas distintas em uma unica tabela RRS feed

  • Pergunta

  • Boa tarde

    Estou com uma grande dúvida:

    Tenho as seguintes tabelas:

    tabCliente

    idcli  cliente   qtde_produtos
    1        João  5000
    2        José         30000
    3 Maria  100000


    tabProduto

    idprod      produtos            val_mensal ano
    1             0 a 10 mil           12000.00 2019
    2             10 mil a 30 mil    24000.00 2019
    3             30 mil a 100 mil    48000.00 2019

    tabC

    id_tabC   idcli   idprod
    1             1        1
    2             2        2
    3             3        3

    Preciso fazer com que toda vez que um cliente for inserido na tabela Cliente, inclua automaticamente na tabC o ID do cliente e o ID do produto.


    sexta-feira, 11 de outubro de 2019 19:51

Todas as Respostas

  • Deleted
    sexta-feira, 11 de outubro de 2019 20:27
  • Na tabela cliente tenho os dados do clientes e quantos produtos eles têm no estoque.. A tabela produto é o controle que me permite saber, quantos produtos cada cliente tem e qual o valor mensal eles têm de pagar por eles. Exemplo: ClienteX tem 2000 produtos, então pela minha tabela produtos sei que ele tem que pagar 1200 por mês.
    sexta-feira, 11 de outubro de 2019 22:10
  • SS_DBAJr,

    A algum tempo atrás tivemos um post similar ao seus, mas que envolvia três tabelas.

    Pois bem, mas falando do IDProduto, qual deveria ser utilizado para inserir na Tabela TabC? Existe na tabela de Produtos o IDCliente?

    Qual é o seu controle para identificar o Cliente x Produto?

    Dependendo da sua forma de controle ou implementação talvez o uso de um trigger possa ser uma solução simples, mas temos que analisar.

    Veja se este tipo de cenário poderá lhe dar um caminho:

    -- Criando a Tabela A --
    Create Table TabelaA
    (Codigo Int Identity(1,1) Primary Key,
     Produto Char(5),
     Data Date,
     Quantidade Int,
     Status Char(1))
     Go
    
    -- Criando a Tabela B --
     Create Table TabelaB
     (Codigo Int Identity(1,1) Primary Key,
      Ferramenta Char(5),
      Material Char(5))
    Go
    
    -- Criando a Tabela C --
    Create Table TabelaC
    (Codigo Int,
     Produto Char(5),
     Data Date,
     Quantidade Int,
     Ferramenta Char(5),
     Material Char(5))
    Go
    
    -- Inserindo Dados --
    Insert Into TabelaA (Produto, Data, Quantidade, Status)
    Values ('A',GetDate(),10,'P'),
           ('B',GetDate(),20,'N'),
           ('C',GetDate(),30,Null)
    Go
    
    Insert Into TabelaB (Ferramenta, Material)
    Values ('F1','M1'),
           ('F2','M2'),
           ('F3','M3')
    Go
    
    -- Criando a Trigger --
    Create Trigger T_TabelaA_Validar
    On TabelaA
    After Insert, Delete
    As
    Begin
    
    Set NoCount On
    
    Declare @Codigo Int  
    
    -- Encerrando o trigger em caso de não ocorrer manipulação de linhas --
    If (@@RowCount = 0)
    Return
    
    If (Select Status From Inserted) Is Not Null
     Begin
      Set @Codigo = (Select Codigo From Inserted)
    
      Insert Into TabelaC (Codigo, Produto, Data, Quantidade, Ferramenta, Material)
      Select A.Codigo, A.Produto, A.Data, A.Quantidade,
             B.Ferramenta, B.Material
      From TabelaA A Inner Join TabelaB B
                    On A.Codigo = B.Codigo
      Where A.Codigo = @Codigo
      End
    
     If (Select Status From Deleted) Is Not Null
      Begin
       Set @Codigo = (Select Codigo From Deleted)
    
       Delete From TabelaC 
       Where Codigo = @Codigo
      End
    
    End
    
    -- Testando --
    Insert Into TabelaB (Ferramenta, Material)
    Values ('F4','M4')
    Go
    
    Insert Into TabelaA (Produto, Data, Quantidade, Status)
    Values ('D',GetDate(),40,'A')
    Go
    
    -- Validando os dados inseridos na Tabela C --
    Select * From TabelaC
    Go
    

    Ressalto que este é somente um exemplo, um esboço de Código que compartilhei com base em outro post, talvez possa lhe dar uma orientação ou nortear em uma possível solução.

    Verifique, analise e valide de acordo com a sua necessidade.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sexta-feira, 11 de outubro de 2019 22:24
  • Deleted
    sexta-feira, 11 de outubro de 2019 22:48
  • A coluna Produtos é varchar, e teria que comparar ela à quantidade de produtos, que o campo é int. Porque no caso, toda vez que inserisse um Produto, automaticamente a informação iria para tabelaC, informando o ID do cliente, a quantidade de produtos e o valor mensal.

    segunda-feira, 14 de outubro de 2019 11:42
  • Deleted
    segunda-feira, 14 de outubro de 2019 12:02
  • A coluna Produtos é varchar, e teria que comparar ela à quantidade de produtos, que o campo é int. Porque no caso, toda vez que inserisse um Produto, automaticamente a informação iria para tabelaC, informando o ID do cliente, a quantidade de produtos e o valor mensal.

    SS_DBAJr,

    Neste caso, não temos como realizar uma comparação entre um valor numérico para com um valor texto.

    Você terá que analisar justamente com base em uma estrutura predefinida o que poderá ser aplicado como comparativo, quantidade é uma coisa, valor mensal é outra coisa, mas procure estabelecer um padrão para se usar de tipos de dados, é mais indicado quando nos referimos a quantidades e valores realizar a comparação e identificação entre tipos de dados numéricos.



    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 14 de outubro de 2019 13:12