none
Inserir dados simultanemante em varias tabelas atraves de view RRS feed

  • Pergunta

  • Tenho duas tabelas: clientes e pedidos

    CREATE TABLE Clientes ( 
    Cli_ID INT IDENTITY(1,1) PRIMARY KEY, 
    Nome varchar (20), 
    Cidade varchar(20)
    );
    
    
    
    
    CREATE TABLE Pedidos( 
    PedidoID INT IDENTITY(1,1) PRIMARY KEY, 
    Cli_ID INT REFERENCES Clientes(Cli_ID), 
    ValorPedido decimal (10,2), 
    DataPedido smalldatetime DEFAULT(GETDATE())); 
    
    
    e a seguinte view:
    
    
    CREATE VIEW vw_clientes_pedidos 
    AS 
    SELECT  cli.Cli_ID,cli.nome, 
    ped.ValorPedido, ped.Datapedido 
    FROM Clientes cli 
    INNER JOIN Pedidos ped 
    ON cli.Cli_ID = ped.Cli_ID 
    GO 
    

    Eu quero saber como inserir os dados simultaneamente nas tabelas atraves da view. Quebrei a cabeça e nao consegui. 


      
    sexta-feira, 10 de fevereiro de 2012 02:22

Respostas

  • Olá Daniel,

    Independente de como será feito as inserções você terá que escrever os scripts INSERT, o que vai mudar neste caso é a forma como eles serão executados, você poderá fazer por Triggers, Procedures ou dependendo da situação por MERGE.

    Mas de qualquer forma terá que escrevê-los, se precisa atualizar várias tabelas de uma vez pode fazer uma procedure que faça estas inserções em lote, mas ai depende da regra do seu negócio.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    • Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:04
    • Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
    sexta-feira, 10 de fevereiro de 2012 12:23
  • Daniel,

    Concordo com o David Silva, para este tipo de processo, você terá que implementar alguma rotina que possa aplicar suas regras de negócio.

    Com o trigger também é possível realizar estes tipos de implementações, mas o trigger trabalha sempre em uma tabela e dentro do bloco de transações em que esta tabela esta sendo manipulada.

    Acredito que para este tipo de situação a melhor alternativa é fazer uso de uma stored procedure.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:05
    • Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
    sexta-feira, 10 de fevereiro de 2012 12:27

Todas as Respostas

  • Olá Daniel,

    Este não é o conceito de um View(Visão), se você quer inserir dados oriundos de uma View tudo bem, mas o fará utilizando um comando INSERT que não é permitido dentro da view.

    O que você poderá fazer é algo semelhante a:

    INSERT [TABELA] (COLUNAS)
    SELECT (COLUNAS) FROM VIEW


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    sexta-feira, 10 de fevereiro de 2012 02:37

  • "Com a trigger criada sobre a view, temos agora a capacidade de fazer INSERT 
    sobre as tabelas (neste exemplo estamos usando apenas a tabela Pedidos) 
    utilizando a view. "  (artigo devmedia)

    Então eu comenti o erro de interpretação.

     rs


    sexta-feira, 10 de fevereiro de 2012 02:45
  • Tenho um projeto em java, há várias tabelas relacionadas, como eu faço para inserir dados em todas as tabelas de uma vez só, sem ter que fazer "insert int tbl1 (campos) values (); insert int tbl2 (campos) values (); insert int tbl3 (campos) values ();"

    Vai dá uma trabalheira desgramada. Existe alguma forma de simplificar esse processo? 

    sexta-feira, 10 de fevereiro de 2012 02:49
  • Olá Daniel,

    Independente de como será feito as inserções você terá que escrever os scripts INSERT, o que vai mudar neste caso é a forma como eles serão executados, você poderá fazer por Triggers, Procedures ou dependendo da situação por MERGE.

    Mas de qualquer forma terá que escrevê-los, se precisa atualizar várias tabelas de uma vez pode fazer uma procedure que faça estas inserções em lote, mas ai depende da regra do seu negócio.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com

    • Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:04
    • Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
    sexta-feira, 10 de fevereiro de 2012 12:23
  • Daniel,

    Concordo com o David Silva, para este tipo de processo, você terá que implementar alguma rotina que possa aplicar suas regras de negócio.

    Com o trigger também é possível realizar estes tipos de implementações, mas o trigger trabalha sempre em uma tabela e dentro do bloco de transações em que esta tabela esta sendo manipulada.

    Acredito que para este tipo de situação a melhor alternativa é fazer uso de uma stored procedure.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:05
    • Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
    sexta-feira, 10 de fevereiro de 2012 12:27