none
Procedure com chave estrangeira RRS feed

  • Pergunta

  • Boa tarde!
       pessoal, eu preciso relacionar duas tabelas e uma única tabela, alguém pode me dar um exemplo de como chamar uma FK em uma procedure e que os comandos de insert, update e delete  se relacione nas 3 tabelas, caso o usuário decida mudar algum dado?

      grata pela atenção !!

    segunda-feira, 7 de novembro de 2016 16:41

Respostas

  • Boa noite Larissa,

    Segue um exemplo de uma procedure que passando o nome do usuário ela te retorna o nome, idade e profissão dele, sendo que uma tabela tem apenas o nome e idade e na outra tabela tem a profissão.

    E uma procedure que faz update nas duas tabelas.

    Para vc fazer as funções de delete, update e insert nas tabelas que tem relacionamento vc vai ter que fazer dentro da suas procedure duas funções, igual eu fiz no exemplo da procedure de updadte.

    Espero ter ajudado

    CREATE PROCEDURE PR_BUSCAUSUARIO 
    (
     @Nome varchar(100)
    )
    as
    begin
    DECLARE @TabelaUsuario TABLE -- Crio uma tabela temporaria
    
    (
    
    idUsuario INT ,
    
    Nome VARCHAR(100),
    
    idade INT
    
    )
    
    ;
    
    -- Insiro dados na tabela
    
    INSERT INTO @TabelaUsuario(idUsuario, Nome, idade)VALUES (1, 'Maria', 20),(2, 'Rodrigo', 30);
    
     
    
     
    
    DECLARE @TabelaProfissao TABLE -- Crio uma tabela temporaria
    
    (
    
    id INT ,
    
    idUsuario INT,
    
    Profissao VARCHAR(100)
    
    )
    
    ;
    
    -- Insiro dados na tabela
    
    INSERT INTO @TabelaProfissao(id, idUsuario, Profissao)VALUES (1, 1, 'Marceneiro'),(2, 2, 'Motorista');
    
     
    
    -- select fazendo join na tabela profissão
    
    SELECT
    
       U.Nome,
    
       U.Idade,
    
       P.Profissao    
    
     
    
    FROM @TabelaUsuario U
    
    JOIN @TabelaProfissao P
    
    ON U.idUsuario = P.idUsuario
    where U.Nome = @nome
    end
    


    EXEMPLO DE UPDATE

    Create Procedure UpdateUsuario
    (
     @id int,
     @Nome varchar(100),
     @Idade int,
     @Profissao varchar(100)
    )
    as
    begin
    
    
    UPDATE TabelaUsuario
    SET Nome = @Nome,
    idade = @Idade,
    where idUsuario = @id
    
    
    UPDATE TabelaProfissao 
    SET Profissao = @Profissao ,
    where idUsuario = @id
    
    END
     
    



    segunda-feira, 7 de novembro de 2016 21:40

Todas as Respostas

  • Como assim os comandos de insert, update e delete se relacionar?

    Poderia dar um exemplo de estrutura de banco e de resultado esperado?


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 7 de novembro de 2016 16:49
  • tipo, quando eu alterar algum dado que contém na tabela, os dados sejam atualizados nas tabelas das chaves estrangeiras, entendeu?
        mas se você puder me dar um exemplo básico de como devo utilizar um join em  procedures eu agradeço!!

    segunda-feira, 7 de novembro de 2016 19:16
  • tipo, quando eu alterar algum dado que contém na tabela, os dados sejam atualizados nas tabelas das chaves estrangeiras, entendeu?
        mas se você puder me dar um exemplo básico de como devo utilizar um join em  procedures eu agradeço!!


    Mas se as tabelas estão relacionadas através da chave de estrangeira mão seria necessário replicar a alteração do dado em todas as tabelas. Tem como mostrar a parte do seu DER que mostra a relação?

    Rodrigo Reis Ferreira
    Microsoft Certified

    segunda-feira, 7 de novembro de 2016 19:58
  • Boa noite Larissa,

    Segue um exemplo de uma procedure que passando o nome do usuário ela te retorna o nome, idade e profissão dele, sendo que uma tabela tem apenas o nome e idade e na outra tabela tem a profissão.

    E uma procedure que faz update nas duas tabelas.

    Para vc fazer as funções de delete, update e insert nas tabelas que tem relacionamento vc vai ter que fazer dentro da suas procedure duas funções, igual eu fiz no exemplo da procedure de updadte.

    Espero ter ajudado

    CREATE PROCEDURE PR_BUSCAUSUARIO 
    (
     @Nome varchar(100)
    )
    as
    begin
    DECLARE @TabelaUsuario TABLE -- Crio uma tabela temporaria
    
    (
    
    idUsuario INT ,
    
    Nome VARCHAR(100),
    
    idade INT
    
    )
    
    ;
    
    -- Insiro dados na tabela
    
    INSERT INTO @TabelaUsuario(idUsuario, Nome, idade)VALUES (1, 'Maria', 20),(2, 'Rodrigo', 30);
    
     
    
     
    
    DECLARE @TabelaProfissao TABLE -- Crio uma tabela temporaria
    
    (
    
    id INT ,
    
    idUsuario INT,
    
    Profissao VARCHAR(100)
    
    )
    
    ;
    
    -- Insiro dados na tabela
    
    INSERT INTO @TabelaProfissao(id, idUsuario, Profissao)VALUES (1, 1, 'Marceneiro'),(2, 2, 'Motorista');
    
     
    
    -- select fazendo join na tabela profissão
    
    SELECT
    
       U.Nome,
    
       U.Idade,
    
       P.Profissao    
    
     
    
    FROM @TabelaUsuario U
    
    JOIN @TabelaProfissao P
    
    ON U.idUsuario = P.idUsuario
    where U.Nome = @nome
    end
    


    EXEMPLO DE UPDATE

    Create Procedure UpdateUsuario
    (
     @id int,
     @Nome varchar(100),
     @Idade int,
     @Profissao varchar(100)
    )
    as
    begin
    
    
    UPDATE TabelaUsuario
    SET Nome = @Nome,
    idade = @Idade,
    where idUsuario = @id
    
    
    UPDATE TabelaProfissao 
    SET Profissao = @Profissao ,
    where idUsuario = @id
    
    END
     
    



    segunda-feira, 7 de novembro de 2016 21:40
  • Muito Obrigada Ravi!
        era isso mesmo que eu estava tentando entender!!!
         vou montar as procedures e depois te dou o retorno!!!
           :)

    terça-feira, 8 de novembro de 2016 15:27
  • Que bom que pude ajudar.

    Só coloca como resposta a solução que eu postei pra fechar o tópico aqui no fórum.

    ;)

    terça-feira, 8 de novembro de 2016 16:12